mongo

在本页面

Description

  • mongo

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

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

  • 打开Download Center。对于mongo Enterprise Shell,选择 MongoDB Enterprise Server 标签。

  • 从下拉列表中选择您的首选版本和 os。

  • 从“程序包”下拉列表中选择Shell,然后单击“下载”开始下载程序包。

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

Note

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

Options

Core Options

  • --shell ``

    • 启用 Shell 程序接口。如果您调用 mongo 命令并指定一个 JavaScript 文件作为参数,或在命令行上使用--eval指定 JavaScript,则--shell选项在文件执行完毕后为用户提供 shell 提示。
  • --nodb ``

    • 防止 Shell 程序连接到任何数据库实例。稍后,要连接到 Shell 中的数据库,请参见打开新连接
  • --norc ``

    • 防止 Shell 在启动时采购和评估~/.mongorc.js
  • --quiet ``

    • 连接过程中从 Shell 输出的静音。
  • --port <port>

    • 指定mongodmongos实例正在侦听的端口。如果未指定--port,则 mongo 尝试连接到端口27017
  • --host <hostname>

    • 指定运行mongodmongos的主机的名称。如果未指定,则 mongo 尝试连接到在 localhost 上运行的 MongoDB 进程。

要连接到副本集,请指定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 版的新功能。

  • --eval <javascript>

    • 评估指定为参数的 JavaScript 表达式。 mongo 在评估代码时不会加载其自身的环境。结果,shell 环境的许多选项不可用。
  • --username <username> , -u <username>

  • --password <password> , -p <password>

    • 指定用于对使用身份验证的 MongoDB 数据库进行身份验证的密码。与--username--authenticationDatabase选项结合使用。要强制 mongo 提示 Importing 密码,请 Importing--password选项作为最后一个选项,并省略参数。
  • --help `,` `-h`

    • 返回有关 mongo 选项和用法的信息。
  • --version ``

    • 返回 mongo 版本号。
  • --verbose ``

    • 在连接过程中增加 Shell 程序输出的详细程度。
  • --networkMessageCompressors <string>

    • 3.4 版的新功能。

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

您可以指定以下压缩器:

  • snappy

  • zlib(在 MongoDB 3.6 或更高版本中可用)

Important

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

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

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

  • --ipv6 ``
    • 启用 IPv6 支持。 mongo 默认禁用 IPv6.

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

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

  • <db name>
    • 指定要连接的数据库的名称。例如:
mongo admin

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

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

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

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

  • --disableJavaScriptJIT ``
    • 3.2 版中的新功能。

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

  • --disableJavaScriptProtection ``
    • 3.4 版的新功能。

允许将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
  • <file.js> ``
    • 指定要运行的 JavaScript 文件,然后退出。通常,这应该是最后指定的选项。

Optional

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

mongo file.js --username username --password

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

Authentication Options

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

  • --authenticationMechanism <name>
    • 默认:SCRAM-SHA-1

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

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

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

此选项仅在 MongoDB Enterprise 中可用。

  • --gssapiServiceName ``
    • 2.6 版的新功能。

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

此选项仅在 MongoDB Enterprise 中可用。

TLS/SSL Options

  • --ssl ``
    • 在版本 3.2.6 中更改。

启用与启用了 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 配置

  • --sslPEMKeyFile <filename>
    • 指定同时包含 TLS/SSL 证书和密钥的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

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

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

  • --sslPEMKeyPassword <value>
    • 指定用于解密证书密钥文件的密码(即--sslPEMKeyFile)。仅当证书密钥文件已加密时,才使用--sslPEMKeyPassword选项。在所有情况下, mongo 都会从所有日志记录和报告输出中删除密码。

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

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

  • --sslCAFile <filename>
    • 指定包含来自证书颁发机构的根证书链的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

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

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

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

  • --sslCRLFile <filename>
    • 指定包含证书吊销列表的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

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

  • --sslFIPSMode ``
    • 2.6 版的新功能。

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

Note

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

  • --sslAllowInvalidCertificates ``
    • 绕过服务器证书的验证检查,并允许使用无效的证书进行连接。

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 配置

  • --sslAllowInvalidHostnames ``
    • 3.0 版中的新功能。

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

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

  • --sslDisabledProtocols <string>

    • 禁用指定的 TLS 协议。该选项可识别以下协议:TLS1_0TLS1_1TLS1_2,并且从版本 3.6.9 TLS1_3开始。
  • 在 macOS 上,您不能禁用TLS1_1并同时启用TLS1_0TLS1_2。您还必须禁用其他两个中的至少一个。例如TLS1_0,TLS1_1

  • 要列出多个协议,请指定以逗号分隔的协议列表。例如TLS1_0,TLS1_1

3.6.5 版中的新功能。

Sessions

  • --retryWrites ``
    • 3.6 版的新功能。

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

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

Files

  • ~/.dbshell

    • mongo保留.dbshell文件中命令的历史记录。

Note

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

  • ~/.mongorc.js

    • mongo将从调用mongo的用户的主目录中读取.mongorc.js文件。在该文件中,用户可以定义变量,自定义mongo Shell 提示符或更新每次启动 Shell 时希望更新的信息。如果您在命令行中使用mongo --eval或通过指定.js 文件到 mongo使用 Shell 程序来评估 JavaScript 文件或表达式,那么* 6 *在 JavaScript 完成处理之后,mongo将读取.mongorc.js文件。

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

  • /etc/mongorc.js

    • mongo shell 在启动时评估的全局mongorc.js文件。如果用户在 HOME目录中也有.mongorc.js文件,则mongo shell 会在评估用户的.mongorc.js文件之前*先评估全局/etc/mongorc.js文件。

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

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

  • /tmp/mongo_edit<time_t>.js

    • 在编辑文件时由mongo创建。如果文件存在,则mongo会将110的整数附加到时间值上,以尝试创建唯一文件。
  • %TEMP%mongo_edit<time_t>.js

    • 在 Windows 上由mongo.exe在编辑文件时创建。如果文件存在,则mongo会将110之间的整数附加到时间值,以尝试创建唯一文件。

Environment

  • EDITOR

    • 指定要与edit shell 命令一起使用的编辑器的路径。 JavaScript 变量EDITOR将覆盖 EDITOR的值。
  • HOME

    • 指定主目录的路径,其中mongo将在其中读取.mongorc.js文件并写入.dbshell文件。
  • HOMEDRIVE

    • 在 Windows 系统上, HOMEDRIVE指定mongo将读取.mongorc.js文件和写入.dbshell文件的目录的路径。
  • HOMEPATH

    • 指定主目录的 Windows 路径,其中mongo将读取.mongorc.js文件并写入.dbshell文件。

Keyboard Shortcuts

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

KeybindingFunction
Up arrow从历史 Logging 检索先前的命令
Down-arrow从历史 Logging 检索下一个命令
Home转到行首
End转到行尾
TabAutocomplete 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-GAbort
Ctrl-J接受/评估生产线
Ctrl-K杀死/擦除线
Ctrl-L 或 Importingcls清除萤幕
Ctrl-M接受/评估生产线
Ctrl-N从历史 Logging 检索下一个命令
Ctrl-P从历史 Logging 检索先前的命令
Ctrl-R反向搜索命令历史
Ctrl-S前向搜索命令历史
Ctrl-TTranspose characters
Ctrl-U执行 Unix 线丢弃
Ctrl-W执行 Unix 单词擦除
Ctrl-YYank
Ctrl-Z挂起(作业控制在 Linux 中有效)
Ctrl-H向后删除字符
Ctrl-I完成,与 Tab 键相同
Meta-B向后退一个字
Meta-CCapitalize word
Meta-DKill word
Meta-F向前走一个字
Meta-L将单词更改为小写
Meta-U将单词更改为大写
Meta-YYank-pop
Meta-BackspaceBackward-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)"