如何使用 MongoDB Compass

x33g5p2x  于2021-10-27 转载在 Go  
字(12.1k)|赞(0)|评价(0)|浏览(638)

介绍

只要您已经有权访问运行 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 Downloads page。在那里,找到页面右侧的 Available Downloads 部分,然后从那里的下拉菜单中选择所需的 VersionPlatform。本教程的示例将安装 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,请按照 official MongoDB Compass documentation 中的安装说明进行操作。

安装 MongoDB Compass 包后,您可以通过执行以下命令来运行安装的软件:

mongodb-compass

Compass 将用欢迎屏幕向您致意:

现在您已经在本地机器上安装了 MongoDB Compass,您可以将其连接到远程服务器上运行的 MongoDB 实例。

第 2 步 - 连接到 MongoDB 服务器

要将 MongoDB Compass 与在远程服务器上运行的 MongoDB 实例一起使用,您必须首先像通过 shell 访问数据库一样连接到它。假设你完成了关于如何在 Ubuntu 20.04 上为 MongoDB 配置远程访问的先决条件教程,您已经将 MongoDB 服务器配置为允许来自本地计算机的远程连接。

Compass 允许您使用连接字符串(包含所有必要数据库连接信息的单行文本)或单独填写所有连接详细信息进行连接。本指南将概述如何使用第二个选项进行连接,但如果您想学习如何构建连接字符串,我们鼓励您查看 official documentation on the subject

单击欢迎屏幕顶部的单独填写连接字段新连接 屏幕将出现,其中包含空字段列表:

Hostname 字段中输入运行 MongoDB 实例的远程服务器的 IP 地址。保留默认的 Port 值,除非您更改了 MongoDB 实例侦听连接的端口。由于服务器已启用身份验证,因此您还需要将 Authentication 选项切换为 Username / Password。选择此选项后,在三个新字段中输入管理 MongoDB 用户的用户名、与此帐户关联的密码以及此用户的身份验证数据库。

单击 Connect 按钮后,Compass 将尝试连接到 MongoDB 实例。如果成功,您将进入主屏幕,显示实例上所有数据库的列表。它们还将与高级信息一起出现在左侧面板中,例如数据库服务器的 IP 地址以及它正在运行的 MongoDB 版本:

如果连接尝试失败,请确保您正确输入了所有连接详细信息。

成功将本地 Compass 安装连接到远程 MongoDB 服务器实例后,您可以继续创建新的测试数据库并将测试数据插入到新集合中。

第 3 步 — 准备测试数据

为了说明 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,保留所有其他字段的默认值,然后单击 Create Database

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 按钮以显示更多选项。 PROJECTSORT 字段将出现在 FILTER 字段下方。许多其他字段也将出现,但详细讨论所有这些字段超出了本指南的范围。

PROJECTSORT 字段都接受您将传递给 shell 中的 find()sort() 方法的相同文档。例如,尝试将返回的字段限制为仅显示城市名称和人口,然后按人口升序对结果进行排序。

要将字段列表限制为 namepopulation,请将以下投影文档添加到 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 集合的初始文档,以便它们仅包含代表北美和亚洲城市的文档。为此,使用下拉选择... 菜单并选择 $match 阶段。 MongoDB Compass 将为您提供一个示例,显示它所期望的语法。预期值与通常作为 $match 阶段设置的查询过滤器文档类型相同。

输入以下内容以仅匹配来自北美和亚洲的城市:

{
    "continent": { $in: ["North America", "Asia"] }
}

Compass 会自动预览应用第一阶段的结果,在右侧显示过滤后的文档。这样,您可以快速验证每个阶段是否按预期工作:

第二步是按人口降序对文档进行排序。使用 ADD STAGE 按钮添加一个额外的阶段。将出现另一个空的舞台行。在那里,选择 $sort 舞台并输入以下作为舞台设置:

{ "population": -1 }

再一次,返回的文档将具有相同的结构,但 Tokyo 在预览窗格中排在第一位,现在显示排序结果:

((16 美元))

由于城市列表现在按来自预期大陆的人口排序,下一个必要步骤是按国家对城市进行分组,仅从每个组中选择人口最多的城市。添加另一个阶段,这次选择 $group 作为阶段类型。

要按独特的大陆和国家对对城市进行分组,并通过仅显示人口最多的城市的名称和人口来总结这些对,请输入以下分组设置:

{
    "_id": {
        "continent": "$continent",
        "country": "$country"
    },
    "first_city": { $first: "$name" },
    "highest_population": { $max: "$population" }
}

highest_population 值使用 $max 累加器运算符来查找组中最高的人口,而 first_city 获取第一个城市的名称。由于您之前应用的排序阶段,您可以确定它也是该组中人口最多的城市:

应用分组阶段后,文档列表减少到 9 个条目,但文档结构现在与以前不同。 Compass 在右侧预览分组阶段的输出,显示新计算的 highest_populationfirst_city 值以及 _id 字段中的分组表达式值。

满足本节开头描述的要求的最后一步是转换文档的结构。您可以通过添加另一个阶段行并选择 $project 作为阶段来实现。要实现指定的文档结构,请输入以下投影文档:

{
    "_id": 0,
    "location": {
        "country": "$_id.country",
        "continent": "$_id.continent",
    },
    "most_populated_city": {
        "name": "$first_city",
        "population": "$highest_population"
    }
}

该文档首先取消了 _id 字段,因此它根本不会出现在输出中。接下来,它创建一个 location 字段,写成一个嵌套文档,其中包含两个字段:countrycontinent。这些中的每一个都引用了输入文档中的值。 most_populated_city 遵循类似的原则,将 namepopulation 字段嵌套在里面。这两个字段均指顶级字段 first_cityhighest_population。这个投影阶段有效地为输出构建了一个全新的结构:

请注意,此聚合阶段右侧的预览窗格显示了转换后的示例输出。有了这个,您可以快速确认导致预期转换的投影阶段。

通过使用聚合管道构建器,您可以方便地逐步构建聚合,而无需担心单个聚合命令的复杂语法。切换 SAMPLE MODE 开关可确保 MongoDB Compass 仅使用输入文档的一个子集,这使得在源数据集很大时可以更快地开发管道。

由于每个阶段的预览窗格,您可以验证每个阶段是否提供预期结果。您还可以使用翻转开关禁用和启用各个阶段了解在不激活某些阶段的情况下聚合管道将如何工作。

第 6 步 — 分析架构结构

在前面的步骤中,您使用 MongoDB Compass 通过交互式工具浏览数据。通过这些示例,Compass 更像是在 MongoDB 中执行常规功能的辅助工具,但在这一步中,您将探索 Compass 独有的一个功能:其模式可视化界面。此工具可帮助您了解集合中的数据结构。

要使用它,首先在 cities 集合视图中选择 Schema 选项卡。该视图最初是空的,但是当您按下 Analyze 按钮时,Compass 将搅动数据以揭示有关其形式、大小和内容的见解:

((19 美元))
注意: 与仅浏览数据类似,您可以使用过滤查询文档来缩小选择范围并强制 MongoDB Compass 提供有关集合文档子集的见解:

((20 美元))

对于每个文档字段,模式可视化器将提供对数据库中找到的数据的洞察。

例如,注意模式可视化器中的 _id 字段。 MongoDB 要求每个文档都有一个 _id 字段作为主键。在 Compass 的模式可视化器中,它显示文档何时插入到数据库中。在此示例中,所有文档都在周日晚上的一个时间点插入。但是,对于活的数据库,条目将在数据库的整个使用过程中传播。这些知识可能有助于衡量在典型的一周中使用了多少数据库。

对于 continentcountry 字段,它们都包含字符串值,但值在集合中出现多次,默认情况下,Compass 可以方便地显示每个值在数据集中出现的频率。可用的 continent 值较少,因此它们显示在一行中,说明它们经常出现在数据集中。数据集中有更多不同的 country 值,因此界面会创建频率图。

name 字段也是一个字符串值字段,但这次每个字段都是唯一的。在这种情况下,Compass 显示了一组示例值。

通过将 Compass 的模式可视化器与 MongoDB 的过滤功能相结合,您可以快速扫描数据和生成的可视化,让您无需编写复杂的查询即可分析数据。这不仅可以方便地可视化数据库的内容,还可以帮助理解数据以帮助做出有关创建索引或分片集群的决策。

结论

在本文中,您熟悉了 MongoDB Compass,这是一个 GUI,允许您通过方便的可视化显示来管理您的 MongoDB 数据。您使用该工具创建新集合、插入新文档、过滤和导航数据、创建多阶段聚合管道,并使用架构可视化工具可视化集合的架构。

本教程仅描述了 MongoDB Compass 功能的一个子集,其中包含与 MongoDB 管理相关的许多其他功能,例如索引管理、查询执行计划可视化以及服务器实时性能指标的视图。要了解有关 Compass 如何帮助您的更多信息,我们鼓励您学习官方的 official MongoDB Compass documentation

相关文章