如何使用 MongoDB Shell

0 股票
0
0
0
0

介绍

像 MongoDB 这样的数据库系统通常与外部应用程序配合使用,该应用程序连接到数据库服务器并执行诸如读取和处理数据或写入新条目等操作。在这种情况下,您无需直接与数据库服务器交互。但有时可能需要直接访问数据库以执行管理任务或运行临时数据库查询。.

这时,MongoDB shell 就派上用场了。MongoDB shell 是一个交互式控制台,您可以使用它连接到数据库服务器并在其上运行命令,从而执行管理任务,并直接读取、写入或操作数据。MongoDB shell 使您能够通过命令行连接到数据库,并从终端窗口以交互方式进行操作。它还允许您运行外部脚本,从而更轻松地执行重复性任务。.

在本教程中,您将使用 MongoDB shell 连接到 MongoDB 数据库并以交互方式查询数据库。您还将使用 shell 中内置的帮助系统和自动完成功能。.

先决条件
  • 服务器需要配置一个具有 sudo 权限的普通非 root 用户,以及一个使用 UFW 防火墙的防火墙。本教程已在运行 Ubuntu 20.04 的服务器上验证过。
  • 服务器上已安装 MongoDB。.
  • 通过启用身份验证和创建管理员用户,您的 MongoDB 服务器实例已得到保护。.

注意:相关教程中关于如何配置服务器、安装以及安全安装 MongoDB 的内容均以 Ubuntu 20.04 为例。本教程侧重于 MongoDB 本身,而非底层操作系统。只要启用身份验证,本教程通常适用于任何 MongoDB 安装,而与操作系统无关。.

步骤 1 – 连接到 MongoDB 服务器

要打开 MongoDB shell,请在服务器提示符下运行 mongo 命令。默认情况下,mongo 命令会打开一个 shell,连接到本地安装的、运行在 27017 端口的 MongoDB 实例。.

运行 mongo 命令时不带任何附加参数:

mongo

这会打印一条欢迎信息,其中包含有关 shell 连接的服务器以及已安装的 MongoDB 版本的信息。以下示例显示了运行在 127.0.0.1(代表本地主机的回环接口)上的 MongoDB 服务器,其默认端口为 27017,版本为 4.4.6。.

Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6

尝试列出服务器上的所有数据库。在执行 shell 命令后,输入 show dbs 并按回车键:

show dbs

假设您已按照“如何保护 MongoDB”的先决教程进行操作,则此命令不会返回任何输出。原因是,即使 MongoDB 服务器正在运行且 shell 能够连接到它,您也没有提供任何身份验证信息。因此,您没有任何访问服务器数据库的权限,`show dbs` 命令也不会返回任何内容。.

输入以下命令退出:

exit

Mongo shell 会打印一条简短的告别信息,然后将您返回到系统 shell:

Output
bye

注意:除了输入 exit 命令外,关闭 shell 的另一种方法是按 CTRL+C。.

现在再次将 MongoDB shell 连接到数据库服务器,但这次需要提供用户名和密码以正确验证您的 MongoDB 实例。为此,您需要提供额外的命令行参数,如下例所示:

mongo -u AdminSammy -p --authenticationDatabase admin

该命令由以下几个部分组成:

  • -u:此标志设置用于在 MongoDB 服务器上进行身份验证的用户名。.
  • -p:此标志指示 MongoDB shell 在连接数据库时使用密码。按下回车键后,终端窗口将提示您输入密码。.
  • --authenticationDatabase:此选项指定您登录时使用的用户身份验证数据库。通常,管理员帐户在 admin 数据库中进行管理,但如果您的用户身份验证数据库不同,请输入该数据库名称而不是 admin。.

注意:要连接到运行在 localhost 以外的机器上的 MongoDB 服务器,您可以将 -h 标志和服务器的 IP 地址添加到 shell 命令中。.

输入安装时设置的密码,您将再次获得 shell 访问权限。.

现在再次运行 show dbs 命令:

show dbs

这次,该命令返回系统上所有数据库的列表:

Output
admin 0.000GB
config 0.000GB
local 0.000GB

由于您已通过特权用户身份验证,因此 shell 允许您对任何这些数据库执行命令。.

现在您已经使用 MongoDB shell 成功连接到 MongoDB 服务器,接下来您可以学习如何在 shell 中运行命令。.

步骤 2 – 执行命令

与其他命令行界面一样,MongoDB shell 接受命令并将所需结果返回到标准输出。如前所述,在 MongoDB shell 中,所有命令都输入在命令行中,命令行以大于号 (>) 表示。在命令后按 Enter 键会立即执行该命令并将输出结果显示在屏幕上。.

MongoDB 数据库中的大多数命令都是针对选定的数据库或数据库集执行的。当前选定的数据库由可通过 shell 访问的 db 对象表示。您可以通过在 shell 中输入 db 来检查当前选定的数据库:

db

在新连接的 shell 实例中,选定的数据库始终名为 test:

Output
test

您可以安全地使用此数据库来测试 MongoDB 和 MongoDB shell。要切换到另一个数据库,您可以运行 `use` 命令,后跟新数据库的名称。尝试切换到名为 fruit 的数据库:

use fruits

shell 会通知您当前正在使用新数据库:

Output
switched to db fruits

您可以通过再次输入 db 来验证这一点,以查找当前选定数据库的名称:

db

这次的输出结果反映了新的数据库:

Output
fruits

请注意,您并未显式创建 fruits 数据库。MongoDB 允许您对尚不存在的数据库和集合执行命令。它仅在首次向其中插入对象时才会创建这些结构。即使您成功将当前数据库更改为 fruits,该数据库也仍然不存在。.

尝试通过向其中插入一个对象来创建此数据库。以下示例说明了如何将对象插入到数据库中名为 apples 的集合中。通过添加此对象,该操作将同时创建 fruits 数据库和 apples 集合。.

在 MongoDB shell 中输入以下命令并按 Enter 键。请注意高亮显示的集合名称(apples):

db.apples.insert()

在左括号后按回车键会打开多行命令提示符,允许您在多行中输入更长的命令。插入命令只有在输入右括号后才算完整输入。在此之前,提示符会从大于号变为省略号(…)。.

你不需要像这样将 MongoDB 命令拆分成多行,但这样做可以使长命令更容易阅读和理解。.

在下一行,将对象用一对括号({ 和 })括起来。此示例文档仅包含一个字段和值对:

{name: 'Red Delicious'}

再次按下回车键后,会出现另一行,允许您添加更多命令参数,例如其他文档或 MongoDB 插入方法允许的任何规范。但在本例中,您可以通过输入右括号并按下回车键来结束输入并执行操作。.

这一次,Mongo shell 记录了插入命令的结尾,并执行了整个命令。.

Output
WriteResult({ "nInserted" : 1 })

将此新对象插入数据库后,水果数据库和苹果集合都将存在。使用 show dbs 命令检查可用数据库列表:

show dbs

它同样返回所有可用数据库的列表,但这次列表中包含了水果数据库:

Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GB

show collections 命令可用于检索当前所选数据库中的集合列表:

show collections

由于选择了水果数据库,因此只会返回新创建的苹果集合:

Output
apples

通过以上内容,您学习了如何在 MongoDB shell 中运行命令。您还创建了一个实例对象,该对象进而创建了一个新的数据库和一个新的集合,它们现在都存在于服务器上。.

在本指南的最后一步中,您将学习如何调用 MongoDB shell 辅助功能,以便更好地理解命令并更轻松地执行它们。.

步骤 3 – 从 shell 获取交互式帮助

MongoDB shell 内置了帮助系统,可用于获取有关数据库系统可用命令及其存储对象的信息。您可以使用 help 命令在 shell 提示符下直接查看此入门帮助页面:

help

MongoDB shell 会返回一个包含更详细帮助条目的列表,您可以从中获取有关 shell 特定部分的更多信息,以及一些最常用命令的示例:

Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell

本示例输出中高亮显示的前两项分别展示了如何对当前数据库和当前数据库中的一个集合运行辅助命令。示例中的集合名称为 mycoll,但可以使用任何有效的集合名称。.

最后高亮显示的一行——db.mycoll.find()——是一个使用 find 命令从集合中检索对象的示例方法,该命令会列出给定集合中的对象。由于集合是 MongoDB 数据库中最常用的数据结构之一,因此在这一步中,我们将学习如何使用 MongoDB 的集合级 find() 和 help() 方法。.

首先,访问 apples 软件包的手册页,查找该软件包可用的命令:

db.apples.help()

注意:虽然最初的 help 命令只是 help,但在数据库和集合对象上执行辅助方法时,必须在命令后加上一对括号,以便将其读作 help() 而不是 help。.

该命令的输出结果是一个长长的列表,其中包含了您可以对苹果集合执行的一系列命令:

Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .

除了提供可在 db.apples 集合中运行的可用命令的清晰列表(每个命令后面都附有简短的解释),本手册页还提供了使用常用命令(如 find())的示例。.

这个内置帮助系统可以方便地查阅可用命令。如果您记不清命令的确切拼写或正确组成部分,可以使用它来检查语法。.

既然你已经从手册页中了解到 find() 可以用来从集合中检索对象,那么现在你可以检索上一步中在 apples 集合中创建的对象了。.

然而,这个例子突出了 MongoDB 的另一个交互式辅助功能:命令补全。MongoDB shell 遵循其他流行 shell(例如 Bash 或 zsh)的模式,即按下键盘上的 TAB 键会自动补全您正在输入的任何命令。.

请先输入以下内容,但暂时不要按回车键:

db.a

不要输入完整的集合名称,而是按键盘上的 Tab 键。MongoDB shell 会返回所有可用集合的列表,首先是以下内容:

Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(

此输出列出了三个命令(用左括号表示),以及设置的 apples。.

在 Shell 中输入另一个字母:

db.ap

再次按下 Tab 键。这次,除了 ap 之外别无选择,MongoDB shell 会自动补全输入,并为您输入 db.apples。遵循同样的原则,使用 Tab 键补全完成 find() 命令。输入 fi 但不要按 Enter 键:

db.apples.fi

按下 TAB 键会自动将命令名称补全为 db.apples.find。此时,再次按下 TAB 键会让 shell 列出更多可能的选项,但您也可以手动添加右括号来执行 find 命令:

db.apples.find()

shell 将显示 apple 集合中的所有对象列表。其中只会有一个对象,即您之前导入的那个对象:

Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }

结果

本文将向您介绍 MongoDB shell。该 shell 允许您向数据库中插入新对象、查询现有集合以及执行管理任务,以管理数据库、其数据及其用户。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢