本章内容
- 启动mongo Shell并连接到MongoDB
- 使用mongo Shell
- 制表符补全命令和其他键盘快捷键
- .mongorc.js文件
- 退出shell
mongo shell是用于连接MongoDB的交互式JavaScript接口。通过mongo shell可以查询、更新数据以及执行数据库管理操作。
mongo shell包含在MongoDB Server的安装的文件内。 MongoDB也提供mongo shell的独立软件包。要下载独立的mongo shell软件包:
- 打开下载中心。对于mongo Enterprise Shell,选择MongoDB Enterprise Server选项卡。
- 从下拉列表中选择您的软件版本和操作系统。
- 根据您的平台环境下载相应的软件包:
平台 | 下载包 |
Windows | 选择ZIP软件包,下载包含mongo shell的文档包。 |
macOS | 选择TGZ软件包,下载包含mongo shell的文档包。 |
Linux | 选择shell软件包,下载mongo shell。 |
安装并启动MongoDB之后,就可以将mongo shell连接到正在运行的MongoDB实例。
注意
从MongoDB 4.2(和4.0.13)开始,当连接到非正版( non-genuine)MongoDB实例时,mongo shell将显示警告消息,因为这些实例的行为可能与官方MongoDB实例不同。例如缺失的或不完整的功能,不同的功能行为等。
一、启动mongo Shell并连接到MongoDB
1.启动shell的准备工作
在尝试启动mongo shell之前,请确保MongoDB正在运行。
打开一个终端窗口(或Windows的命令提示符),然后转到<mongodb安装目录> / bin目录:
cd <mongodb installation dir>/bin
提示
将<mongodb安装目录> / bin添加到PATH环境变量中,您可以键入mongo,而不必转到<mongodb安装目录> / bin目录或指定二进制文件的完整路径。
2.通过默认端口连接本地MongoDB实例
可以在没有任何命令行选项的情况下运行mongo shell,使用默认端口27017连接到在本地主机上运行的MongoDB实例:
mongo
3.通过非默认端口连接本地MongoDB实例
要显式指定端口,应包括--port命令行选项。例如,要使用端口30000连接到在localhost上运行的MongoDB实例,请执行以下操作:
mongo --port 30000
4.连接远程主机上的MongoDB实例
要连接到在远程主机上运行的MongoDB实例,需要明确指定主机名和/或端口号,有如下三种方式:
- 使用连接字符串。例如,执行以下操作:
mongo "mongodb://mongodb0.example.com:30000"
- 使用命令行选项--host <host>:<port>。例如,执行以下操作:
mongo --host mongodb0.example.com: 30000
- 使用--host <host>和--port <port>命令行选项。例如,执行以下操作:
mongo --host mongodb0.example.com --port 30000
备注
<host>可以是主机名、域名、IP地址。
5.连接具有身份验证的MongoDB实例
当要连接到MongoDB实例,需要进行身份验证时,有如下两种方式:
- 在连接字符串中指定用户名,身份验证数据库以及可选的密码。例如,以simman用户身份认证连接到远程MongoDB数据库simman:
注意
如果未在连接字符串中指定密码,则外壳程序将提示您输入密码。
mongo "mongodb://simman@iZ2549m20n1Z:30000/?authSource=simman"
- 使用命令行选项--username <user>和--password,--authenticationDatabase <db>。例如,以simman用户身份认证连接到远程MongoDB数据库simman:
注意
如果您指定--password而不输入用户密码,则外壳程序将提示您输入密码。
mongo --host iZ2549m20n1Z --port 30000 --username simman --password --authenticationDatabase simman
6.连接到MongoDB副本集
要连接到副本集:
- 在连接字符串中指定副本集名称和成员。
mongo "mongodb://10.171.17.227:20000,10.171.30.102:20000,10.171.94.133:20000/?replicaSet=cfgReplSet"
- 如果使用DNS种子列表连接格式,则可以指定连接字符串:
mongo "mongodb+srv://server.example.com/"
注意
对于连接,使用+ srv连接字符串修饰符会自动将ssl选项设置为true。
- 在命令行选项中指定副本集名称和成员:--host <副本集名称> / <host1>:<port1>,<host2>:<port2>,...。例如,要连接到名为cfgReplSet的副本集,请执行以下操作:
mongo --host cfgReplSet/10.171.17.227:20000,10.171.30.102:20000,10.171.94.133:20000
7.TLS / SSL连接
对于TLS / SSL连接,
- 可以在连接字符串中指定ssl=true选项。
mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA&ssl=true"
- 如果使用DNS种子列表连接格式,则可以包括+ srv连接字符串修饰符:
mongo "mongodb+srv://server.example.com/"
注意
对于连接,使用+ srv连接字符串修饰符会自动将ssl选项设置为true。
- 可以指定--ssl命令行选项。例如,要连接到名为replA的副本集,请执行以下操作:
mongo --ssl --host replA/mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017
也可以看看:
有关连接示例中使用的选项以及其他选项的更多信息,请参阅mongo参考资料和启动mongo的示例。
二、使用mongo Shell
- 要显示您正在使用的数据库,请输入db:
db
该操作应返回test,这是默认数据库。
- 要切换数据库,请使用use <db>助手,如以下示例所示:
use <database>
另请参见db.getSiblingDB()方法,从当前数据库访问其他数据库,而无需切换当前数据库上下文(即db)。
- 要列出用户可用的数据库,请使用助手 show dbs。 [1]
您可以切换到不存在的数据库。首次将数据存储在数据库中(例如通过创建集合)时,MongoDB会创建数据库。例如,以下代码在insertOne()操作期间创建数据库myNewDatabase和集合myCollection:
use myNewDatabase
db.myCollection.insertOne( { x: 1 } );
db.myCollection.insertOne()是mongo shell提供的可用方法之一。
- db是指当前数据库。
- myCollection是集合的名称。
如果mongo shell不接受集合的名称,则可以使用替代的db.getCollection()语法。例如,如果集合名称包含空格或连字符、以数字开头或与内置函数冲突:
db.getCollection("3 test").find()
db.getCollection("3-test").find()
db.getCollection("stats").find()
mongo shell提示符每行的限制为4095个码点。如果您输入的行包含4095个以上的码点,则Shell会截断它。
有关mongo shell中MongoDB基本操作的更多文档,请参阅:
[1]如果部署使用访问控制权限,则该操作将根据用户权限返回不同的值。有关详细信息,请参见listDatabases行为。
1.输出结果的格式化
db.collection.find()方法将游标返回到结果。但是,在mongo shell中,如果未使用var关键字将返回的游标分配给变量,则该游标将自动迭代多达20次,以最多打印与查询匹配的前20个文档。 mongo shell将提示“键入它”以使其再迭代20次。
要格式化打印结果,可以将.pretty()添加到操作中,如下所示:
db.myCollection.find().pretty()
另外,您可以在mongo shell中使用以下显式打印方法:
- Print () 无需格式化即可打印
- print (tojson(<obj>) )以JSON格式打印,等同于printjson()
- printjson () 以JSON格式打印,等同于print(tojson(<obj>))
有关在mongo shell中处理游标的更多信息和示例,请参阅在mongo Shell中迭代游标。另请参阅游标帮助文档,以获取mongo shell中的游标帮助列表。
2.mongo Shell中的多行操作
如果您以开括号('('),大括号('{')或开括号('[')结束一行,则后续各行以省略号(“ ...”)开头,直到您输入相应的右括号(')',右括号('}')或右括号(']')。 mongo shell在评估代码之前等待右括号(')',右括号('}')或右括号(']'),如以下示例所示:
> if ( x > 0 ) {
... count++;
... print (x);
... }
如果输入两个空行,则可以退出行继续模式,如以下示例所示:
> if (x > 0
...
...
>
三、制表符补全命令和其他键盘快捷键
mongo shell支持键盘快捷键(shortcuts)。例如,
- 使用up/down箭头键滚动浏览命令历史记录。有关.dbshell文件的更多信息,请参见.dbshell文档。
- 使用<Tab>来自动补全或列出完整的可能性信息,如以下示例中所示,该示例使用<Tab>来完成以字母'c'开头的方法名称:
db.myCollection.c<Tab>
因为有很多以字母'c'开头的集合方法,所以<Tab>将列出所有以'c'开头的方法。
有关快捷键的完整列表,请参见Shell键盘快捷键。
四、.mongorc.js文件
启动时,mongo会在用户的HOME目录中检查名为.mongorc.js的JavaScript文件。 如果找到,mongo会在首次显示提示之前解释.mongorc.js的内容。 如果您使用shell程序来评估JavaScript文件或表达式,或者通过在命令行上使用--eval选项,或者通过向mongo指定.js文件,则mongo将在JavaScript完成处理后读取.mongorc.js文件。 您可以使用--norc选项防止加载.mongorc.js。
五、退出shell
要退出shell,请键入quit()或使用<Ctrl-C>快捷方式。
也可以看看: