MongoDB shell使用指南(内含使用内置的帮助系统和Mongo shell的自动完成功能)

您所在的位置:网站首页 进入shell命令 MongoDB shell使用指南(内含使用内置的帮助系统和Mongo shell的自动完成功能)

MongoDB shell使用指南(内含使用内置的帮助系统和Mongo shell的自动完成功能)

2023-09-27 08:21| 来源: 网络整理| 查看: 265

如何使用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 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, ) - bulk execute write operations, optional parameters are: w, wtimeout, j db.apples.count( query = {}, ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS db.apples.countDocuments( query = {}, ) - 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 键将自动完成你正在输入的任何命令。

开始输入以下内容,但先不要按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的信息。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3