mongo

在本页面

Description

mongo是 MongoDB 的交互式 JavaScript Shell 界面,它为系统 Management 员提供了强大的界面,并为开发人员提供了直接测试数据库查询和操作的方法。 mongo还提供了用于 MongoDB 的功能齐全的 JavaScript 环境。

mongo Shell 是MongoDB Server安装的一部分。 MongoDB 还提供mongo shell 作为独立软件包。要下载独立的mongo shell 软件包:

如果所选 os 和版本Shell选项不可用,请与 MongoDB Technical Support联系以获得帮助。

Note

从 MongoDB 3.6.15 开始,当连接到非正版 MongoDB 实例时,mongo shell 将显示警告消息,因为这些实例的行为可能与官方 MongoDB 实例不同。例如缺少或不完整的功能,不同的功能行为等。

Options

Core Options

要连接到副本集,请指定replica set name以及集合成员的种子列表。使用以下形式:

<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>

对于 TLS/SSL 连接(--ssl), mongo 验证所连接的mongodmongos的主机名是否与mongodmongos--sslPEMKeyFile证书的 CN 或 SAN 相匹配。如果主机名与 CN/SAN 不匹配,则 mongo 将无法连接。

对于DNS 种子列表连接,将连接协议指定为mongodb+srv,后跟 DNS SRV 主机名记录和所有选项。 authSourcereplicaSet选项(如果包含在连接字符串中)将覆盖 TXTLogging 设置的任何相应的 DNS 配置的选项。使用mongodb+srv:连接字符串会隐式启用 Client 端连接的 TLS/SSL(通常使用ssl=true设置)。可以通过在查询字符串中设置ssl=false来关闭 TLS/SSL 选项。

Example:

mongodb+srv://server.example.com/?connectionTimeout=3000ms

3.6 版的新功能。

启用网络压缩以在此 mongo shell 与以下对象之间进行通信:

您可以指定以下压缩器:

Important

当双方都启用网络压缩时,消息将被压缩。否则,双方之间的消息将不被压缩。

如果指定多个压缩器,则列出压缩器的 Sequences 以及通信启动器都很重要。例如,如果mongo shell 指定以下网络压缩器zlib,snappy,而mongod指定snappy,zlib,则mongo shell 和mongod之间的消息将使用zlib

如果各方不共享至少一个公共压缩器,则各方之间的消息将不被压缩。例如,如果mongo shell 指定了网络压缩器zlib,而mongod指定了snappy,则mongo shell 和mongod之间的消息不会被压缩。

要通过 IPv6 连接到 MongoDB 集群,必须在启动 mongo shell 时同时指定--ipv6 --host<mongod/mongos IPv6 address>

默认情况下,mongodmongos禁用 IPv6 支持。连接到mongod/mongos时指定--ipv6不会在mongod/mongos上启用 IPv6 支持。有关在mongod/mongos上启用 IPv6 支持的文档,请参见net.ipv6

mongo admin

上面的命令会将 mongo Shell 连接到在本地计算机上运行的 MongoDB 部署的admin database。您可以使用可解析的主机名或 IP 地址指定远程数据库实例。使用/字符将数据库名与主机名分开。请参阅以下示例:

mongo mongodb1.example.net/test
mongo mongodb1/admin
mongo 10.8.8.10/test

此语法是连接到特定数据库的“唯一”方法。

要指定备用主机和数据库,必须使用此语法,并且不能使用--host--port

禁止使用 JavaScript 引擎的 JIT 编译器。

允许将javascriptjavascriptWithScope类型的字段自动编组到mongo shell 中的 JavaScript 函数。

通过设置--disableJavaScriptProtection标志,可以立即执行文档中包含的 JavaScript 函数。下面的示例演示了 Shell 内的这种行为:

> db.test.insert({ _id: 1, jsFunc: function(){ print("hello") } } )
WriteResult({ "nInserted" : 1 })
> var doc = db.test.findOne({ _id: 1 })
> doc
{ "_id" : 1, "jsFunc" : function (){ print ("hello") } }
> typeof doc.jsFunc
function
> doc.jsFunc()
hello

默认行为(当mongo启动时,*不带--disableJavaScriptProtection标志)将嵌入式 JavaScript 函数转换为不可执行的 MongoDB Shell 类型Code。下面的示例演示了 Shell 中的默认行为:

> db.test.insert({ _id: 1, jsFunc: function(){ print("hello") } } )
WriteResult({ "nInserted" : 1 })
> var doc = db.test.findOne({ _id: 1 })
> doc
{ "_id" : 1, "jsFunc" : { "code" : "function (){print(\"hello\")}" } }
> typeof doc.func
object
> doc.func instanceof Code
true
> doc.jsFunc()
2016-11-09T12:30:36.808-0800 E QUERY    [thread1] TypeError: doc.jsFunc is
not a function :
@(shell):1:1

Optional

要指定要执行的 JavaScript 文件并允许 Mongo 使用--password提示您 Importing 密码,请将文件名作为第一个参数,并将--username--password作为最后一个选项,如下所示:

mongo file.js --username username --password

文件运行完毕后,使用--shell选项返回 Shell 程序。

Authentication Options

如果未为--authenticationDatabase指定值,则 mongo 使用连接字符串中指定的数据库。

指定 mongo 实例用于对mongodmongos进行身份验证的身份验证机制。

Value Description
SCRAM-SHA-1 RFC 5802使用 SHA1 哈希函数的标准咸化挑战响应身份验证机制。
MONGODB-CR MongoDB 质询/响应身份验证。 (* MongoDB 3.6 中已弃用*)
MONGODB-X509 MongoDB TLS/SSL 证书认证。
GSSAPI (Kerberos) 使用 Kerberos 的外部身份验证。此机制仅在MongoDB Enterprise中可用。
PLAIN(LDAP SASL) 使用 LDAP 的外部身份验证。您也可以使用PLAIN对数据库中的用户进行身份验证。 PLAIN以纯文本形式传输密码。此机制仅在MongoDB Enterprise中可用。

使用GSSAPI/Kerberos指定服务的主机名。 如果计算机的主机名与 DNS 解析的主机名不匹配。

此选项仅在 MongoDB Enterprise 中可用。

使用GSSAPI/Kerberos指定服务的名称。仅当服务未使用默认名称mongodb时才需要。

此选项仅在 MongoDB Enterprise 中可用。

TLS/SSL Options

启用与启用了 TLS/SSL 支持的mongodmongos的连接。

从版本 3.2.6 开始,如果未指定--sslCAFilessl.CAFile,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。在 MongoDB 的早期版本中,mongo shell 退出并显示错误,表明它无法验证证书。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

当使用--ssl选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificatesmongodmongos时,此选项是必需的。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

如果 PEM 文件中的私钥已加密,并且您未指定--sslPEMKeyPassword选项,则 mongo 将提示您 Importing 密码。参见TLS/SSL 证书密码短语

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

从版本 3.2.6 开始,如果未指定--sslCAFilessl.CAFile,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。在 MongoDB 的早期版本中,mongo shell 退出并显示错误,表明它无法验证证书。

如果使用 x.509 身份验证,则必须指定--sslCAFilessl.CAFile

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

指导 mongo 使用已安装的 OpenSSL 库的 FIPS 模式。您的系统必须具有符合 FIPS 的 OpenSSL 库,才能使用--sslFIPSMode选项。

Note

兼容 FIPS 的 TLS/SSL 仅在MongoDB Enterprise中可用。有关更多信息,请参见为 FIPS 配置 MongoDB

Note

从 MongoDB 3.6.6 开始,如果在使用 x.509 身份验证时指定--sslAllowInvalidCertificatesssl.allowInvalidCertificates: true,则无效的证书仅足以构建 TLS/SSL 连接,而对于身份验证则“不足”。

Warning

对于与mongodmongos的 TLS/SSL 连接,请尽可能避免使用--sslAllowInvalidCertificates,并且仅在不可能进行入侵的系统上使用--sslAllowInvalidCertificates

如果mongo shell(和其他MongoDB Tools)与--sslAllowInvalidCertificates选项一起运行,则mongo shell(和其他MongoDB Tools)将不会尝试验证服务器证书。这对过期的mongodmongos证书以及冒充有效的mongodmongos实例的外部进程造成了漏洞。

使用allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

禁用 TLS/SSL 证书中的主机名验证。允许 mongo 连接到 MongoDB 实例,即使其证书中的主机名与指定的主机名不匹配也是如此。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongosClient 端的 TLS/SSL 配置

3.6.5 版中的新功能。

Sessions

启用可重试写入作为mongo Shell 中会话的默认值。

有关会话的更多信息,请参见Client 会议和因果一致性保证

Files

Note

mongo不在历史文件中记录与身份验证相关的交互,包括authenticatedb.createUser()

指定--norc选项以禁用读取.mongorc.js

/etc/mongorc.js必须具有运行 Shell 程序的用户的读取权限。 mongo--norc选项仅禁止显示用户的.mongorc.js文件。

在 Windows 上,全局mongorc.js </etc/mongorc.js>存在于%ProgramData%\MongoDB目录中。

Environment

Keyboard Shortcuts

mongo Shell 支持以下键盘快捷键:[1]

Keybinding Function
Up arrow 从历史 Logging 检索先前的命令
Down-arrow 从历史 Logging 检索下一个命令
Home 转到行首
End 转到行尾
Tab Autocomplete method/command
Left-arrow 向后退一个字符
Right-arrow 前进一个字符
Ctrl-left-arrow 向后退一个字
Ctrl-right-arrow 向前走一个字
Meta-left-arrow 向后退一个字
Meta-right-arrow 向前走一个字
Ctrl-A 转到行的开头
Ctrl-B 向后退一个字符
Ctrl-C 退出mongo shell
Ctrl-D 删除一个字符(或退出mongo shell)
Ctrl-E 转到行尾
Ctrl-F 前进一个字符
Ctrl-G Abort
Ctrl-J 接受/评估生产线
Ctrl-K 杀死/擦除线
Ctrl-L 或 Importingcls 清除萤幕
Ctrl-M 接受/评估生产线
Ctrl-N 从历史 Logging 检索下一个命令
Ctrl-P 从历史 Logging 检索先前的命令
Ctrl-R 反向搜索命令历史
Ctrl-S 前向搜索命令历史
Ctrl-T Transpose characters
Ctrl-U 执行 Unix 线丢弃
Ctrl-W 执行 Unix 单词擦除
Ctrl-Y Yank
Ctrl-Z 挂起(作业控制在 Linux 中有效)
Ctrl-H 向后删除字符
Ctrl-I 完成,与 Tab 键相同
Meta-B 向后退一个字
Meta-C Capitalize word
Meta-D Kill word
Meta-F 向前走一个字
Meta-L 将单词更改为小写
Meta-U 将单词更改为大写
Meta-Y Yank-pop
Meta-Backspace Backward-kill word
Meta-< 检索命令历史 Logging 的第一个命令
Meta-> 检索命令历史 Logging 的最后一条命令
[1] MongoDB 可容纳多个键绑定。从 2.0 开始,mongo包括对基本 emacs 键绑定的支持。

Use

通常,用户在系统提示符下使用mongo命令调用 Shell 程序。对于其他情况,请考虑以下示例。

使用访问控制连接到 mongod 实例

要使用身份验证和非标准端口连接到远程主机上的数据库,请使用以下形式:

mongo --username <user> --password <pass> --host <host> --port 28015

或者,考虑以下简短形式:

mongo -u <user> -p <pass> --host <host> --port 28015

<user><pass><host>替换为适合您情况的值,然后根据需要替换或忽略--port

使用 mongo Shell 执行 JavaScript 文件

要在启动 Shell 程序会话之前执行 JavaScript 文件而不评估~/.mongorc.js文件,请使用以下形式:

mongo --shell --norc alternate-environment.js

要通过身份验证执行 JavaScript 文件(提示 Importing 密码而不是在命令行中提供密码),请使用以下格式:

mongo script-file.js -u <user> -p

使用--eval 执行 JavaScript 代码

您可以使用--eval选项直接从命令行执行 JavaScript。

例如,以下操作评估一个 JavaScript 字符串,该字符串查询一个集合并将结果打印为 JSON。

在 Linux 和 macOS 上,您需要使用单引号(例如')将 JavaScript 括起来,格式如下:

mongo --eval 'db.collection.find().forEach(printjson)'

在 Windows 上,您需要使用双引号(例如")将 JavaScript 括起来,格式如下:

mongo --eval "db.collection.find().forEach(printjson)"
首页