阅读 92

MongoDB shell使用指南

如何使用MongoDB shell

简介

像MongoDB这样的数据库系统通常与一个外部应用程序一起使用,该应用程序连接到数据库服务器并执行操作,如读取和处理数据或写入新条目。在这样的情况下,你并没有直接与数据库服务器进行交互。不过,要在数据库上执行管理任务或自己执行临时的数据库查询,可能需要直接访问。

这就是_MongoDB shell_的作用。MongoDB shell是一个交互式控制台,你可以用来连接到数据库服务器并在上面执行命令,允许你执行管理任务,并直接读、写或操作数据。MongoDB shell使你能够从一个命令行提示符连接到数据库,并从一个终端窗口交互式地处理它。它还允许你运行外部脚本以更方便地执行重复的任务。

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

前提条件

要学习本教程,你将需要。

  • 一台有普通的、非root用户的、具有sudo 权限的服务器,以及一个配置了UFW的防火墙。本教程使用运行Ubuntu 20.04的服务器进行验证,你可以按照Ubuntu 20.04的初始服务器设置教程来准备你的服务器。

  • 在你的服务器上安装MongoDB。要设置这个,请遵循我们的教程:如何在Ubuntu 20.04上安装MongoDB。

  • 你的服务器的MongoDB实例通过启用认证和创建一个管理用户来保证安全。要像这样保护MongoDB,请遵循我们的教程:如何在Ubuntu 20.04上保护MongoDB。

注意:关于如何配置服务器、安装和保护MongoDB安装的链接教程是指Ubuntu 20.04。本教程专注于MongoDB本身,而不是底层操作系统。它通常适用于任何MongoDB的安装,无论其操作系统如何,只要认证被启用。

第1步 - 连接到MongoDB服务器

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

试着运行mongo 命令,没有其他参数。

mongo 复制代码

这将打印出一个欢迎信息,其中包含关于shell所连接的服务器的一些信息,以及所安装的MongoDB的版本。下面的例子表明MongoDB服务器运行在127.0.0.1 (代表localhost的回环接口)上,位于MongoDB的默认端口(27017),并且运行版本4.4.6。

OutputMongoDB 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 复制代码

在该信息下面,将出现MongoDB shell的提示--用一个大于号表示--。

尝试列出服务器上所有可用的数据库。在shell提示后输入show dbs ,然后按ENTER

show dbs 复制代码

假设你遵循了《如何保护MongoDB》的前提教程,这个命令不会返回任何输出。其原因是,尽管MongoDB服务器正在运行,并且shell能够连接到它,但你没有提供任何认证信息。正因为如此,你没有访问权限来处理任何服务器数据库,并且show dbs 命令没有返回任何结果。

通过键入退出shell。

exit 复制代码

Mongo shell将打印一个简短的告别信息,并让你返回到系统shell。

Outputbye 复制代码

注意:不输入exit 命令,另一种关闭shell的方法是按CTRL + C

现在尝试重新连接MongoDB shell到数据库服务器,但这次要提供一个用户名和密码来正确地验证你的MongoDB实例。要做到这一点,你需要提供额外的命令行参数,如下面的例子。

mongo -u AdminSammy -p --authenticationDatabase admin 复制代码

这个命令由几个部分组成。

  • -u :这个标志设置了用于验证进入MongoDB服务器的用户名。这个例子指定了在先决条件的MongoDB安全教程中创建的管理用户,AdminSammy。在本教程中,如果有不同的管理用户,你可以用你自己的管理用户的用户名来代替它。

  • -p :这个标志告诉MongoDB shell在连接数据库时使用一个密码。在你按下ENTER 之后,终端窗口会提示你提供一个密码。

  • --authenticationDatabase :这个选项指定了你要登录的用户的认证数据库。通常情况下,管理账户是在admin 数据库中管理的,但如果你的用户的认证数据库是不同的,请输入该数据库以代替admin

注意:要连接到运行在不同于localhost的机器上的MongoDB服务器,你可以在shell命令中添加-h 标志,后面跟上你的服务器的IP地址。

输入安装时设置的密码,你将再次获得对shell的访问。

现在再试着执行一次show dbs 命令。

show dbs 复制代码

这一次,该命令将返回系统中所有可用数据库的列表。

Outputadmin   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

Outputtest 复制代码

你可以安全地使用这个数据库来试验MongoDB和MongoDB shell。要切换到另一个数据库,你可以运行use 命令,后面跟上新的数据库名称。尝试切换到一个叫做fruits 的数据库。

use fruits 复制代码

shell会通知你,你现在正在使用新的数据库。

Outputswitched to db fruits 复制代码

你可以通过再次输入db ,找到当前选择的数据库的名称来验证这一点。

db 复制代码

这一次,输出将反映新的数据库。

Outputfruits 复制代码

注意,你没有明确地创建fruits 数据库。MongoDB允许你在尚不存在的数据库和集合上运行命令;它只在对象首次插入时才创建这些结构。即使你已经成功地将当前数据库改为fruits ,这个数据库还不存在。

试着通过向其插入一个对象来创建这个数据库。下面的例子概述了如何将一个对象插入到数据库中的一个名为apples 的集合。通过添加这个对象,该操作将同时创建fruits 数据库和apples 集合。

在MongoDB shell中键入以下行,然后按ENTER 。注意高亮显示的集合名称(apples)。

db.apples.insert( 复制代码

在一个开放的括号后按下ENTER ,将启动一个多行命令提示符,允许你在多行中输入更长的命令。在你输入结束括号之前,insert 命令不会登记为完成。在你这样做之前,提示符会从大于号变成省略号(...)。

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

在下一行,在一对大括号内输入对象 ({})。这个例子文件只有一个字段和值对。

{name: 'Red Delicious'} 复制代码

当你再次按下ENTER ,将显示另一行提示,允许你添加进一步的命令参数,如其他文件或MongoDB的insert 方法允许的任何规格。不过对于这个例子来说,你可以通过输入一个闭合括号并按下ENTER ,来结束输入并运行操作。

) 复制代码

这时,Mongo shell会登记insert 命令的结束并执行整个语句。

OutputWriteResult({ "nInserted" : 1 }) 复制代码

在将这个新对象插入数据库后,fruits 数据库和apples 集合都将存在。用show dbs 命令检查可用数据库的列表。

show dbs 复制代码

同样,这将返回所有可用数据库的列表,但这次的列表包括fruits 数据库。

Outputadmin   0.000GB config  0.000GB fruits  0.000GB local   0.000GB 复制代码

要检索当前选择的数据库中可用的集合列表,show collections 命令就派上用场了。

show collections 复制代码

由于fruits 数据库被选中,它将只返回新创建的apples 集合。

Outputapples 复制代码

就这样,你已经学会了如何在MongoDB shell中执行命令。你还创建了一个样本对象,它又创建了一个新的数据库和一个新的集合,现在已经持久化在服务器上。

在本指南的最后一步,你将学习如何调用MongoDB shell的帮助功能,以便更好地理解命令并更容易地执行它们。

第3步 - 从shell中获得交互式帮助

MongoDB shell有一个内置的帮助系统,你可以用它来获取关于数据库系统的可用命令和存储在其中的对象的信息。这个介绍性的帮助屏幕可以在shell提示符下直接用help 命令访问。

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 复制代码

在这个例子的输出中突出显示的前两个条目,分别说明了如何为当前数据库和当前数据库中的一个集合执行help 命令。给出的示例集合名称是mycoll ,但可以使用任何有效的集合名称。

最后突出显示的一行 -db.mycoll.find() - 是使用find 命令从一个集合中检索对象的一个例子,它列出了给定集合中的对象。因为集合是Mongo数据库中最常用的一些结构,这一步将介绍如何使用Mongo的find()help() 集合级方法。

首先,访问apples 集合的帮助屏幕,找到这个集合的可用命令。

db.apples.help() 复制代码

**注意:**虽然最初的帮助命令只是help ,但当对数据库和集合对象执行_帮助方法_时,你必须在命令后面加上一对圆括号,这样它就会读作help() ,而不仅仅是help

这个命令的输出将是一个冗长的可用命令列表,你可以在apples 集合上执行这些命令。

OutputDBCollection 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(如Bashzsh )中的模式,按键盘上的TAB 键将自动完成你正在输入的任何命令。

开始输入以下内容,但先不要按ENTER

db.a 复制代码

不要输入集合的全称,而是按键盘上的TAB 键。MongoDB shell将回应以a 开始的所有可用可能性的列表。

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将显示一个在apples 集合中发现的所有对象的列表。这里将只有一个对象,就是你之前插入的那个。

Output{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" } 复制代码

就这样,你已经学会了如何使用内置的帮助系统和Mongo shell的自动完成功能。

总结

通过阅读这篇文章,你已经熟悉了MongoDB shell。通过shell,你可以在数据库中插入新的对象,查询现有的集合,并执行管理数据库、其数据和用户的管理任务。

MongoDB shell可以直接访问Mongo的大部分功能,如数据库和集合对象和方法,使其成为与数据库服务器互动的主要工具。然而,在以编程方式使用MongoDB时,同样的功能和方法也可以使用,可以通过MongoDB shell脚本或通过MongoDB为许多编程语言提供的驱动程序。

你可以按照本教程中描述的原则在MongoDB shell中执行本系列其他文章中的命令。我们鼓励你在MongoDB官方文档中了解更多关于MongoDB Shell的信息。


作者:后端之巅
链接:https://juejin.cn/post/7024022510454702111

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐