On this page
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
``--nodb
``- 防止 Shell 程序连接到任何数据库实例。稍后,要连接到 Shell 中的数据库,请参见打开新连接。
--norc
``- 防止 Shell 在启动时采购和评估
~/.mongorc.js
。
- 防止 Shell 在启动时采购和评估
--quiet
``- 连接过程中从 Shell 输出的静音。
--port
<port>
--host
<hostname>
要连接到副本集,请指定replica set name
以及集合成员的种子列表。使用以下形式:
<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>
对于 TLS/SSL 连接(--ssl
), mongo 验证所连接的mongod或mongos的主机名是否与mongod或mongos的--sslPEMKeyFile
证书的 CN 或 SAN 相匹配。如果主机名与 CN/SAN 不匹配,则 mongo 将无法连接。
对于DNS 种子列表连接,将连接协议指定为mongodb+srv
,后跟 DNS SRV 主机名记录和所有选项。 authSource
和replicaSet
选项(如果包含在连接字符串中)将覆盖 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>
- 指定用于对使用身份验证的 MongoDB 数据库进行身份验证的用户名。与--password和--authenticationDatabase选项结合使用。
--password
<password>
,
-p
<password>
- 指定用于对使用身份验证的 MongoDB 数据库进行身份验证的密码。与--username和--authenticationDatabase选项结合使用。要强制 mongo 提示 Importing 密码,请 Importing--password选项作为最后一个选项,并省略参数。
--help
`,` `-h`
- 返回有关 mongo 选项和用法的信息。
--version
``- 返回 mongo 版本号。
--verbose
``- 在连接过程中增加 Shell 程序输出的详细程度。
--networkMessageCompressors
<string>
- 3.4 版的新功能。
启用网络压缩以在此 mongo shell 与以下对象之间进行通信:
您可以指定以下压缩器:
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>。
默认情况下,mongod和mongos禁用 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 版的新功能。
允许将javascript和javascriptWithScope类型的字段自动编组到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
<dbname>
- 指定已在其中创建指定的--username的身份验证数据库。参见Authentication Database。
如果未为--authenticationDatabase指定值,则 mongo 使用连接字符串中指定的数据库。
--authenticationMechanism
<name>
- 默认:SCRAM-SHA-1
指定 mongo 实例用于对mongod或mongos进行身份验证的身份验证机制。
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中可用。 |
--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 支持的mongod或mongos的连接。
从版本 3.2.6 开始,如果未指定--sslCAFile
或ssl.CAFile
,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。在 MongoDB 的早期版本中,mongo shell 退出并显示错误,表明它无法验证证书。
如果使用 x.509 身份验证,则必须指定--sslCAFile
或ssl.CAFile
。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslPEMKeyFile
<filename>
- 指定同时包含 TLS/SSL 证书和密钥的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。
- 指定同时包含 TLS/SSL 证书和密钥的
当使用--ssl
选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificates的mongod或mongos时,此选项是必需的。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslPEMKeyPassword
<value>
- 指定用于解密证书密钥文件的密码(即
--sslPEMKeyFile
)。仅当证书密钥文件已加密时,才使用--sslPEMKeyPassword选项。在所有情况下, mongo 都会从所有日志记录和报告输出中删除密码。
- 指定用于解密证书密钥文件的密码(即
如果 PEM 文件中的私钥已加密,并且您未指定--sslPEMKeyPassword选项,则 mongo 将提示您 Importing 密码。参见TLS/SSL 证书密码短语。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslCAFile
<filename>
- 指定包含来自证书颁发机构的根证书链的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。
- 指定包含来自证书颁发机构的根证书链的
从版本 3.2.6 开始,如果未指定--sslCAFile
或ssl.CAFile
,则在连接到启用了 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储。在 MongoDB 的早期版本中,mongo shell 退出并显示错误,表明它无法验证证书。
如果使用 x.509 身份验证,则必须指定--sslCAFile
或ssl.CAFile
。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslCRLFile
<filename>
- 指定包含证书吊销列表的
.pem
文件。使用相对或绝对路径指定.pem
文件的文件名。
- 指定包含证书吊销列表的
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 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 身份验证时指定--sslAllowInvalidCertificates
或ssl.allowInvalidCertificates: true
,则无效的证书仅足以构建 TLS/SSL 连接,而对于身份验证则“不足”。
Warning
对于与mongod和mongos的 TLS/SSL 连接,请尽可能避免使用--sslAllowInvalidCertificates
,并且仅在不可能进行入侵的系统上使用--sslAllowInvalidCertificates
。
如果mongo shell(和其他MongoDB Tools)与--sslAllowInvalidCertificates
选项一起运行,则mongo shell(和其他MongoDB Tools)将不会尝试验证服务器证书。这对过期的mongod和mongos证书以及冒充有效的mongod或mongos实例的外部进程造成了漏洞。
使用allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslAllowInvalidHostnames
``- 3.0 版中的新功能。
禁用 TLS/SSL 证书中的主机名验证。允许 mongo 连接到 MongoDB 实例,即使其证书中的主机名与指定的主机名不匹配也是如此。
有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos和Client 端的 TLS/SSL 配置。
--sslDisabledProtocols
<string>
- 禁用指定的 TLS 协议。该选项可识别以下协议:
TLS1_0
,TLS1_1
,TLS1_2
,并且从版本 3.6.9TLS1_3
开始。
- 禁用指定的 TLS 协议。该选项可识别以下协议:
在 macOS 上,您不能禁用
TLS1_1
并同时启用TLS1_0
和TLS1_2
。您还必须禁用其他两个中的至少一个。例如TLS1_0,TLS1_1
。要列出多个协议,请指定以逗号分隔的协议列表。例如
TLS1_0,TLS1_1
。
3.6.5 版中的新功能。
Sessions
--retryWrites
``- 3.6 版的新功能。
启用可重试写入作为mongo Shell 中会话的默认值。
有关会话的更多信息,请参见Client 会议和因果一致性保证。
Files
~/.dbshell
- mongo保留
.dbshell
文件中命令的历史记录。
- mongo保留
Note
mongo不在历史文件中记录与身份验证相关的交互,包括authenticate和db.createUser()。
~/.mongorc.js
- mongo将从调用mongo的用户的主目录中读取
.mongorc.js
文件。在该文件中,用户可以定义变量,自定义mongo Shell 提示符或更新每次启动 Shell 时希望更新的信息。如果您在命令行中使用mongo --eval或通过指定.js 文件到 mongo使用 Shell 程序来评估 JavaScript 文件或表达式,那么* 6 *在 JavaScript 完成处理之后,mongo将读取.mongorc.js
文件。
- mongo将从调用mongo的用户的主目录中读取
指定--norc选项以禁用读取.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
%TEMP%mongo_edit<time_t>.js
- 在 Windows 上由
mongo.exe
在编辑文件时创建。如果文件存在,则mongo会将1
到10
之间的整数附加到时间值,以尝试创建唯一文件。
- 在 Windows 上由
Environment
EDITOR
- 指定要与
edit
shell 命令一起使用的编辑器的路径。 JavaScript 变量EDITOR
将覆盖 EDITOR的值。
- 指定要与
HOME
- 指定主目录的路径,其中mongo将在其中读取
.mongorc.js
文件并写入.dbshell
文件。
- 指定主目录的路径,其中mongo将在其中读取
HOMEDRIVE
HOMEPATH
- 指定主目录的 Windows 路径,其中mongo将读取
.mongorc.js
文件并写入.dbshell
文件。
- 指定主目录的 Windows 路径,其中mongo将读取
Keyboard Shortcuts
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 的最后一条命令 |
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)"
See also