如何使用MongoDB指南针
作为 Write for DOnations 计划的一部分,作者选择了 Open Internet/Free Speech Fund 来接受捐赠。
介绍
只要您已经可以访问运行 MongoDB 的服务器,MongoDB shell 就允许您访问数据库。 但是,命令行界面并不总是适合使用数据库,因为可能不清楚如何查找或分析其数据。 有些人可能会发现改用可视化工具来查看、操作和分析他们的数据很有帮助。 为此,MongoDB 项目提供了一个名为 MongoDB Compass 的官方图形用户界面。
使用 MongoDB Compass,有时缩写为 Compass,您可以通过直观的视觉显示访问 MongoDB 数据库引擎提供的大部分功能。 您可以浏览数据库、集合和单个文档,以交互方式创建查询,操作现有文档,并通过专用界面设计聚合管道。
在本教程中,您将在本地机器上安装 MongoDB Compass,并熟悉如何使用图形工具执行各种数据库管理。
先决条件
要遵循本教程,您将需要:
- 具有
sudo
权限的常规非 root 用户和配置了 UFW 的防火墙的服务器。 本教程使用运行 Ubuntu 20.04 的服务器进行了验证,您可以按照此 Ubuntu 20.04 初始服务器设置教程来准备您的服务器。 - MongoDB 安装在您的服务器上。 要进行此设置,请按照我们关于 如何在 Ubuntu 20.04 上安装 MongoDB 的教程进行操作。
- 通过启用身份验证和创建管理用户来保护服务器的 MongoDB 实例。 要像这样保护 MongoDB,请按照我们关于 如何在 Ubuntu 20.04 上保护 MongoDB 的教程进行操作。
- 您的 MongoDB 实例配置为允许来自本地计算机的连接。 按照我们关于 如何在 Ubuntu 20.04 上为 MongoDB 配置远程访问的指南进行设置。 当您按照本指南进行操作时,一定要使用您的本地机器来代替第二台远程 Ubuntu 服务器 。
- 可以安装 MongoDB Compass 的本地计算机。 本教程包含有关如何在运行基于 Ubuntu 和 RHEL 的操作系统的机器上安装 Compass 的说明,但它还包括指向 MongoDB 在 Windows 和 MacOS 上安装 Compass 的说明的链接。
注意:有关如何配置服务器、安装和安全 MongoDB 安装的链接教程参考 Ubuntu 20.04。 本教程专注于 MongoDB 本身,而不是底层操作系统。 只要启用了身份验证并且您允许从本地计算机访问它,它通常适用于任何 MongoDB 安装,无论操作系统如何。
第 1 步 — 安装 MongoDB Compass
要使用 MongoDB Compass,您必须将其安装在本地计算机上。 MongoDB 为基于 Ubuntu 和 RHEL 的 Linux 发行版以及 Windows 和 MacOS 的图形工具提供官方软件包。
要为您的系统找到合适的包,请在 Web 浏览器中导航到 MongoDB Compass 下载页面 。 在那里,找到页面右侧的 Available Downloads 部分,然后从那里的下拉菜单中选择所需的 Version 和 Platform。 本教程的示例将安装版本 1.28.4,这是撰写本文时的最新稳定版本。
做出选择后,单击复制链接按钮,将下载链接复制到剪贴板。 如果您选择 Ubuntu 作为您的平台,此链接将下载 .deb
软件包,但如果您选择 RedHat,该链接将下载 .rpm
软件包。
然后,在本地机器 上打开一个终端会话 。
如果您的本地计算机正在运行 Ubuntu,并且您复制的链接是针对 .deb
包的,请运行 wget
命令并将刚刚复制的链接作为参数传递给它。 这会将包下载到您的工作目录:
wget https://downloads.mongodb.com/compass/mongodb-compass_1.28.4_amd64.deb
然后用apt
安装.deb
包:
sudo apt install ./mongodb-compass_1.28.4_amd64.deb
此命令将安装 Compass 包以及所有必要的依赖项。
但是,如果您使用的是基于 RHEL 的发行版,例如 CentOS、Fedora 或 Rocky Linux,您可以使用单个命令直接从 Web 下载并安装 .rpm
软件包。 运行以下 dnf
命令,该命令还将安装 Compass 及其所有依赖项:
sudo dnf install -y https://downloads.mongodb.com/compass/mongodb-compass-1.26.1.x86_64.rpm
注意: MongoDB Compass 也可用于 Mac 和 Windows 系统。 要在非 Linux 系统上设置 MongoDB Compass,请按照 官方 MongoDB Compass 文档 中的安装说明进行操作。
安装 MongoDB Compass 包后,您可以通过执行以下命令运行安装的软件:
mongodb-compass
Compass 将通过欢迎屏幕向您致意:
现在您已经在本地计算机上安装了 MongoDB Compass,您可以将其连接到远程服务器上运行的 MongoDB 实例。
第 2 步 - 连接到 MongoDB 服务器
要将 MongoDB Compass 与远程服务器上运行的 MongoDB 实例一起使用,您必须首先连接到它,就像通过 shell 访问数据库一样。 假设您完成了 如何在 Ubuntu 20.04 上为 MongoDB 配置远程访问的先决条件教程,您将已经配置 MongoDB 服务器以允许从本地计算机进行远程连接。
Compass 允许您使用 连接字符串 (包含所有必要数据库连接信息的单行文本)或单独填写所有连接详细信息进行连接。 本指南将概述如何使用第二个选项进行连接,但如果您想了解如何构建连接字符串,我们建议您查看 关于主题 的官方文档。
单击欢迎屏幕顶部的分别填写连接字段。 New Connection 屏幕将出现一个空白字段列表:
在 Hostname 字段中输入运行 MongoDB 实例的远程服务器的 IP 地址。 保留默认的 Port 值,除非您更改了 MongoDB 实例侦听连接的端口。 由于启用了身份验证来保护服务器,因此您还需要将 Authentication 选项切换为 Username / Password。 选择此选项后,在三个新字段中输入您的管理 MongoDB 用户的用户名、与此帐户关联的密码以及此用户的身份验证数据库。
单击 Connect 按钮后,Compass 将尝试连接到 MongoDB 实例。 如果成功,您将被带到显示实例上所有数据库列表的主屏幕。 它们还将与数据库服务器的 IP 地址和它运行的 MongoDB 版本等高级信息一起出现在左侧面板中:
如果连接尝试失败,请确保您正确输入了所有连接详细信息。
将本地 Compass 安装成功连接到远程 MongoDB 服务器实例后,您可以继续创建新的测试数据库并将测试数据插入新集合。
第三步——准备测试数据
为了说明 MongoDB Compass 的不同特性,本指南将在其示例中使用一组示例文档。 此步骤涉及创建一个集合并将这组样本数据插入其中。
该样本集合包含代表世界上人口最多的 20 个城市的文档。 东京的示例文档将遵循以下结构:
代表东京的示例文档
{ "name": "Tokyo", "country": "Japan", "continent": "Asia", "population": 37.400 }
该文件包含有关城市名称、所在国家、大陆以及数百万人口的信息。 本指南将示例数据库命名为 populations
,将存储文档的集合命名为 cities
。
首先,单击主屏幕顶部的 CREATE DATABASE 按钮。 或者,您可以单击左侧面板底部的加号 (+)。
在 MongoDB 中,通常在将第一个文档插入集合时创建数据库和集合,而无需对这些结构进行显式创建操作。 但是,可以显式创建一个新数据库,这就是您将在本教程中的 MongoDB Compass 中执行此操作的方式。
在 Database Name 字段中键入 populations
,在 Collection Name 字段中键入 cities
,保留所有其他字段的默认值,然后单击 [X174X ]创建数据库:
Compass 将创建数据库。 单击 populations
数据库进入数据库视图。 然后,点击 cities
进入空集合视图:
现在已经创建了数据库和集合,您可以将未排序的文档列表插入到 cities
集合中。 单击添加数据按钮,然后选择插入文档选项。
将出现一个窗口,您可以在其中输入一个或多个 JSON 格式的数据文档,就像使用 shell 命令时所做的那样。 在字段中输入以下文档集,替换默认情况下存在的任何内容:
[ {"name": "Seoul", "country": "South Korea", "continent": "Asia", "population": 25.674 }, {"name": "Mumbai", "country": "India", "continent": "Asia", "population": 19.980 }, {"name": "Lagos", "country": "Nigeria", "continent": "Africa", "population": 13.463 }, {"name": "Beijing", "country": "China", "continent": "Asia", "population": 19.618 }, {"name": "Shanghai", "country": "China", "continent": "Asia", "population": 25.582 }, {"name": "Osaka", "country": "Japan", "continent": "Asia", "population": 19.281 }, {"name": "Cairo", "country": "Egypt", "continent": "Africa", "population": 20.076 }, {"name": "Tokyo", "country": "Japan", "continent": "Asia", "population": 37.400 }, {"name": "Karachi", "country": "Pakistan", "continent": "Asia", "population": 15.400 }, {"name": "Dhaka", "country": "Bangladesh", "continent": "Asia", "population": 19.578 }, {"name": "Rio de Janeiro", "country": "Brazil", "continent": "South America", "population": 13.293 }, {"name": "São Paulo", "country": "Brazil", "continent": "South America", "population": 21.650 }, {"name": "Mexico City", "country": "Mexico", "continent": "North America", "population": 21.581 }, {"name": "Delhi", "country": "India", "continent": "Asia", "population": 28.514 }, {"name": "Buenos Aires", "country": "Argentina", "continent": "South America", "population": 14.967 }, {"name": "Kolkata", "country": "India", "continent": "Asia", "population": 14.681 }, {"name": "New York", "country": "United States", "continent": "North America", "population": 18.819 }, {"name": "Manila", "country": "Philippines", "continent": "Asia", "population": 13.482 }, {"name": "Chongqing", "country": "China", "continent": "Asia", "population": 14.838 }, {"name": "Istanbul", "country": "Turkey", "continent": "Europe", "population": 14.751 } ]
单击 INSERT 按钮,Compass 将插入文档列表,然后在收藏浏览器中自动显示:
这样,您就成功地创建了一组代表世界上人口最多的城市的示例文档。 在您探索 MongoDB Compass 时,此集合将用作本指南的示例数据。 接下来,您将学习如何使用图形界面浏览数据。
第 4 步 — 导航和过滤数据
MongoDB Compass 是一个方便的工具,用于通过图形界面浏览存储在 MongoDB 数据库中的数据。 它消除了必须记住晦涩的数据库或集合名称的负担,您只需单击几下即可导航到 MongoDB 服务器上的任何数据库或集合。
Compass 中的主要导航工具是左侧面板,其工作方式类似于显示数据库内容的树。 顶级节点是数据库,您可以单击它以显示可用集合的列表。
要导航到您在上一步中创建的 cities
集合,请单击 populations
数据库名称,其中将显示每个集合的列表。 准备好测试数据后,将提供一个集合。 通过单击集合名称,您将加载数据浏览器屏幕。
默认情况下,Compass 将显示所选集合的空查询返回的前 20 个未过滤结果。 在您在上一步中使用的 ADD DATA 按钮的右侧,您会发现一个 View 部分,您可以从中选择三种不同的显示模式:
- 列表视图:将文档显示为键值对的默认视图,连续显示一个。 此显示模式类似于 JSON 文档格式,但其语法着色和附加界面功能(例如可折叠嵌套文档)有助于使其更具可读性:
- JSON 视图:此视图显示以 JSON 表示的实际文档结构:
- 表格视图:在表格界面中显示数据,类似于关系数据库中的数据。 如果文档遵循明确定义的平面结构,但当嵌入文档或数组出现在文档中时,这可能会很方便:
无论您使用什么视图,您都可以使用数据浏览器屏幕快速查询您的数据,就像您在 MongoDB shell 中使用 find()
方法一样。 例如,您可以通过在 MongoDB shell 中运行以下操作来查询您的集合以查找代表北美城市的所有文档:
db.cities.find({ "continent": "North America" })
在这个find()
方法中,{ "continent": "North America" }
就是查询文档。 这是命令的一部分,它告诉 MongoDB 如何过滤数据。 同样,您可以在集合窗口顶部的 MongoDB Compass 的 FILTER 字段中输入这个或任何其他查询文档来过滤您的数据。
继续在FILTER字段中输入这个查询文档,然后按FIND:
{ "continent": "North America" }
MongoDB Compass 会将文档列表缩小到匹配过滤条件的两个条目。 您可以使用在 find()
命令中使用的任何有效查询文档来过滤 FILTER 字段中的日期。 如果出现语法错误,Compass 会将 FILTER 标记变为红色,表示查询存在问题。
您还可以使用数据浏览器界面对结果进行排序并应用投影以仅返回有限的字段子集。 单击过滤查询栏附近的 OPTIONS 按钮以显示更多选项。 PROJECT 和 SORT 字段将出现在 FILTER 字段下方。 还会出现许多其他字段,但详细讨论所有字段超出了本指南的范围。
PROJECT 和 SORT 字段都接受您将传递给 shell 中的 find()
和 sort()
方法的相同文档。 例如,尝试将返回的字段限制为仅显示城市名称和人口,然后按人口升序对结果进行排序。
要将字段列表限制为 name
和 population
,请将以下投影文档添加到 PROJECT 字段:
{ "_id": 0, "name": 1, "population": 1 }
要按人口升序对列表进行排序,请将以下排序文档添加到 SORT 字段:
{ "population": 1 }
再次单击 FIND 按钮以应用这些投影和排序文档:
Compass 现在显示代表纽约和墨西哥城的两个简化文档。 结果等效于在 MongoDB shell 中运行以下查询:
db.cities.find( { "continent": "North America" }, { "_id": 0, "name": 1, "population": 1 } ).sort( { "population": 1 } )
就像过滤查询文档一样,投影和排序设置中的语法错误会导致相应字段的标签变为红色,以便在出现问题时更容易发现。
要清除您应用的过滤器、投影和排序文档,您可以单击 RESET 按钮。
注意:使用数据浏览器,您还可以修改单个文档的内容。 在列表视图中,将光标悬停在列表中的文档上,然后单击出现的上下文菜单中的铅笔图标:
静态显示将变为可编辑字段列表,您可以自由修改以快速更改文档:
进行所需的更改后,单击 UPDATE 按钮,它们将被写入数据库。
第 5 步 — 使用交互式聚合管道生成器
Compass 的聚合管道构建器是一个图形工具,可帮助创建多步聚合管道。 此步骤说明如何通过添加顺序聚合阶段来构建管道。
注意:此步骤中的示例遵循如何使用聚合教程中的聚合管道,使用类似的测试数据。 如果您不熟悉聚合管道,可以按照该教程先了解其原理。
例如,假设手头的任务是列出集合中代表的国家/地区人口最多的城市,但仅列出在亚洲和北美发现的城市。 管道应该只返回城市的名称和人口。 结果应按人口降序排列,首先返回城市最大的国家。 最后,文档的结构应复制以下内容:
示例文档结构
{ "location" : { "country" : "Japan", "continent" : "Asia" }, "most_populated_city" : { "name" : "Tokyo", "population" : 37.4 } }
要开始构建满足这些要求的聚合管道,请打开 cities
集合的 Aggregations 选项卡。
首先过滤来自 cities
集合的初始文档以仅包含亚洲和北美的国家/地区。 打开 cities
集合的 Aggregations 选项卡:
聚合管道构建器视图的顶部显示集合中的源文档。 这使您可以快速浏览将用作聚合管道输入的文档。 请注意,如果文档没有立即出现,您可能需要按刷新按钮 (⟳) 使这些文档在默认情况下不存在时出现。
在本例中,这些是 cities
文档,它们具有原始的、未更改的结构。 第二行,最初是空的,是第一个聚合阶段。
构建此示例管道的第一步是过滤来自 cities
集合的初始文档,以便它们仅包含代表北美和亚洲城市的文档。 为此,使用下拉 Select… 菜单并选择 $match
阶段。 MongoDB Compass 将为您提供一个示例,展示它所期望的语法。 预期值与通常作为 $match
阶段设置的查询过滤器文档类型相同。
输入以下内容以仅匹配北美和亚洲的城市:
{ "continent": { $in: ["North America", "Asia"] } }
Compass 将自动预览应用第一阶段的结果,在右侧显示过滤后的文档。 这样,您可以快速验证每个阶段是否按预期工作:
第二步是按人口降序排列文档。 使用 ADD STAGE 按钮添加一个附加阶段。 另一个空的舞台行将出现。 在那里,选择 $sort
舞台并输入以下内容作为舞台设置:
{ "population": -1 }
再次,返回的文档将具有相同的结构,但 Tokyo 在预览窗格中排在第一位,现在显示排序结果:
由于城市列表现在按来自预期大陆的人口排序,下一步必要的步骤是按国家/地区对城市进行分组,从每个组中仅选择人口最多的城市。 添加另一个舞台,这次选择 $group
作为舞台类型。
要按唯一的大陆和国家对对城市进行分组,并通过仅显示人口最多的城市的名称和人口来汇总这些对,请输入以下分组设置:
{ "_id": { "continent": "$continent", "country": "$country" }, "first_city": { $first: "$name" }, "highest_population": { $max: "$population" } }
highest_population
值使用 $max
累加器运算符来查找组中最高的人口,而 first_city
获取第一个城市的名称。 由于您之前应用的排序阶段,您可以确定它也是该组中人口最多的城市:
应用分组阶段后,文档列表减少到 9 个条目,但现在的文档结构与以前不同。 Compass 预览右侧分组阶段的输出,显示新计算的 highest_population
和 first_city
值以及 _id
字段中的分组表达式值。
满足本节开头描述的要求的最后一步是转换文档的结构。 您可以通过添加另一个舞台行并选择 $project
作为舞台来做到这一点。 要实现指定的文档结构,请输入以下投影文档:
{ "_id": 0, "location": { "country": "$_id.country", "continent": "$_id.continent", }, "most_populated_city": { "name": "$first_city", "population": "$highest_population" } }
该文档首先抑制了 _id
字段,因此它根本不会出现在输出中。 接下来,它创建一个 location
字段,该字段编写为具有两个字段的嵌套文档:country
和 continent
。 这些中的每一个都引用来自输入文档的值。 most_populated_city
遵循类似的原则,将 name
和 population
字段嵌套在里面。 这两个字段都引用顶级字段 first_city
和 highest_population
。 这个投影阶段有效地为输出构建了一个全新的结构:
请注意,此聚合阶段右侧的预览窗格显示了转换后的示例输出。 有了这个,您可以快速确认投影阶段导致了预期的转换。
通过使用聚合管道构建器,您可以方便地逐步构建聚合,而无需担心单个聚合命令的复杂语法。 切换 SAMPLE MODE 开关可确保 MongoDB Compass 仅使用输入文档的子集,从而在源数据集较大时更快地开发管道。
借助每个阶段的预览窗格,您可以验证每个阶段是否提供了预期的结果。 您还可以使用翻转开关禁用和启用各个阶段,以了解在未激活某些阶段的情况下聚合管道将如何工作。
第 6 步 — 分析模式结构
在前面的步骤中,您使用 MongoDB Compass 使用交互式工具浏览数据。 通过这些示例,Compass 在 MongoDB 中为执行常规功能提供了更多帮助,但在此步骤中,您将探索 Compass 独有的功能:其模式可视化界面。 此工具可以帮助您了解集合中的数据结构。
要使用它,首先在 cities
集合视图中选择 Schema 选项卡。 该视图最初是空的,但是当您按下 Analyze 按钮时,Compass 将搅动数据以揭示有关其形式、大小和内容的见解:
注意: 与仅浏览数据类似,您可以使用过滤查询文档来缩小选择范围,并强制 MongoDB Compass 提供有关集合文档子集的见解:
对于每个文档字段,模式可视化器将提供对数据库中数据的洞察。
例如,请注意模式可视化器中的 _id
字段。 MongoDB 要求每个文档都有一个 _id
字段用作主键。 在 Compass 的模式可视化器中,它显示文档何时插入数据库。 在此示例中,所有文档都在周日晚上的某个时间点插入。 然而,对于一个活的数据库,条目将分布在数据库的整个使用过程中。 这些知识可能有助于衡量在整个典型一周的整个过程中使用了多少数据库。
对于 continent
和 country
字段,它们都包含字符串值,但值在集合中出现多次,Compass 默认方便地显示每个值在数据集中出现的频率。 可用的 continent
值较少,因此它们显示在一行中,说明它们经常出现在数据集中。 数据集中有更多不同的 country
值,因此界面改为创建频率图。
name
字段也是一个字符串值字段,但是这次每一个都是唯一的。 在这种情况下,Compass 会显示一组样本值。
通过将 Compass 的模式可视化器与 MongoDB 的过滤功能相结合,您可以快速扫描数据和生成的可视化,让您无需编写复杂的查询即可分析数据。 这不仅可以方便地可视化数据库的内容,还可以帮助理解数据以帮助做出有关创建索引或分片集群的决策。
结论
在本文中,您熟悉了 MongoDB Compass,这是一个 GUI,可让您通过方便的可视化显示来管理 MongoDB 数据。 您使用该工具创建新集合、插入新文档、过滤和导航数据、创建多阶段聚合管道,并使用模式可视化工具可视化集合的模式。
本教程仅描述了 MongoDB Compass 功能的子集,其中包含与 MongoDB 管理相关的许多其他功能,例如索引管理、查询执行计划可视化以及服务器实时性能指标的视图。 要了解有关 Compass 如何为您提供帮助的更多信息,我们鼓励您学习官方 官方 MongoDB Compass 文档 。