Docs 菜单

Docs 主页开发应用程序MongoDB Manual

旧版 mongo Shell

在此页面上

  • 说明
  • 语法
  • 选项
  • 的知识
  • environment
  • 键盘快捷键
  • 使用

注意

MongoDB v 5中已弃用mongo Shell。 0 。替换项是 mongosh

较旧的mongo Shell 文档包含在该MongoDB版本的相应文档中。

先前版本的快速链接

有关更多信息,请参阅mongo Shell 和mongosh的比较。

mongo是 MongoDB 的交互式 JavaScript Shell 接口,它为系统管理员提供了功能强大的接口,并为开发人员提供了直接使用数据库测试查询和操作的方法。 mongo还提供了一个功能齐全的 JavaScript 环境,可与 MongoDB 一起使用。

mongo Shell 作为MongoDB 服务器安装的一部分包含在内。如果您已经安装了服务器,则会将mongo Shell 安装到与服务器二进制文件相同的位置。

或者,如果您想从 MongoDB Server 单独下载mongo Shell,则可以按照以下步骤将该 Shell 作为独立的软件包安装:

  1. 访问您所用 MongoDB 版本的下载中心:

  2. 从下拉菜单中选择您首选的 VersionPlatform

  3. 根据您的平台选择要下载的Package

    平台
    下载包
    Windows
    选择zip软件包以下载包含mongo shell 的存档。
    macOS
    选择tgz软件包以下载包含mongo shell 的存档。
    Linux
    选择tgz软件包以下载mongo Shell。
  4. mongo Shell 从存档复制到文件系统上的某个位置。

有关特定于您的平台的其他安装指南,或要将mongo Shell 作为 MongoDB Server 安装的一部分进行安装,请参阅适用于您的平台的安装指南。

注意

  • 从 MongoDB 4开始。 2 (以及4 . 0 . 13 ), mongo Shell 在连接到非正版 MongoDB 实例时会显示警告消息,因为这些实例的行为可能与官方 MongoDB 实例不同;例如,缺失或不完整的特征、不同的特征行为等。

  • mongo 禁用对 TLS 1的支持。在使用 TLS 1的系统上进行0加密。 1 + 可用。

  • 您可以使用默认设置运行不带任何命令行选项的mongo Shell:

    mongo
  • 您可以使用指定主机和端口以及其他连接选项的 连接字符串mongo 运行 Shell。例如,以下内容包括tls

    mongo "mongodb://mongodb0.example.com:27017/testdb?tls=true"

    tls选项从 MongoDB 4开始可用。 2 。在早期版本中,使用ssl选项。

    要将mongo Shell 连接到副本集,您可以在连接字符串中指定副本集成员和名称:

    mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA"

    有关连接字符串选项的更多信息,请参阅连接字符串。

  • 您可以使用各种命令行选项运行mongo Shell。例如:

    mongo --host mongodb0.example.com:27017 [additional options]
    mongo --host mongodb0.example.com --port 27017 [additional options]

    有关可用选项的更多信息,请参阅选项。

在版本4中进行了更改。 2

  • MongoDB 弃用 SSL 选项,新增相应的 TLS 选项。

--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会尝试连接到本地主机上运行的 MongoDB 进程。

要连接到副本集,

指定replica set name和集成员的种子列表。使用以下形式:

<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>
对于 TLS/SSL 连接 ( --ssl ),
mongosh验证主机名(在CN --host选项或连接字符串中指定)是否与SAN mongod SAN mongos 。如果SAN存在,则mongoshCN不匹配。如果主机名与SAN (或CN )不匹配, mongosh将无法连接 MongoDB 4 。 2 ,在执行 SAN 比较时,MongoDB 支持比较 DNS 名称或 IP 地址。在以前的版本中,MongoDB 仅支持 DNS 名称的比较。
对于DNS 种子列表连接

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

示例:

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

版本 3.6 中的新增功能

--eval <javascript>

对指定为参数的 JavaScript 表达式求值。 mongo在评估代码时不会加载自己的环境。因此,Shell 环境的许多选项不可用。

--username <username>, -u <username>

指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与--password--authenticationDatabase选项结合使用。

如果使用 连接到 MongoDB Atlas 集群,请在此字段或MONGODB-AWSauthentication mechanism 连接字符串 中指定您的 AWS 访问密钥 ID。或者,该值也可以作为环境变量AWS_ACCESS_KEY_ID 提供。请参阅 使用 AWS IAM 档案连接到 MongoDB Atlas 集群。

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

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

如果使用 连接到 MongoDB Atlas 集群,请在此字段或MONGODB-AWSauthentication mechanism 连接字符串 中指定您的 AWS 访问秘密密钥。或者,该值也可以作为环境变量AWS_SECRET_ACCESS_KEY 提供。请参阅 使用 AWS IAM 档案连接到 MongoDB Atlas 集群。

--apiVersion <version number>

版本 5.0 中的新增功能

指定apiVersion"1"是目前唯一支持的值。

--apiStrict

版本 5.0 中的新增功能

指定如果应用程序使用 Stable API 之外的命令或行为,服务器将使用 APIStrictError 进行响应。

如果指定--apiStrict ,则还必须指定--apiVersion

--apiDeprecationErrors

版本 5.0 中的新增功能

指定如果应用程序使用的命令或行为在指定 apiVersion 中已弃用,服务器将使用APIDeprecationError进行响应

如果指定--apiDeprecationErrors ,则还必须指定--apiVersion

--awsIamSessionToken <aws session token>

如果使用 连接到 MongoDB Atlas 集群,并且除了MONGODB-AWSauthentication mechanism AWS 访问密钥 ID 和秘密访问密钥之外,还使用会话令牌,请在此字段或 连接字符串 中指定您的 AWS 会话令牌。或者,该值也可以作为环境变量AWS_SESSION_TOKEN 提供。请参阅 使用 AWS IAM 档案连接到 MongoDB Atlas 集群。

仅在使用MONGODB-AWS authentication mechanism时有效。

--help, -h

返回有关mongo的选项和使用的信息。

--version

返回mongo版本号。

--verbose

提高连接过程中 Shell 输出的详细程度。

--networkMessageCompressors <string>

版本 3.4 中的新增功能

为此mongo Shell 与以下对象之间的通信启用网络压缩:

您可以指定以下压缩程序:

  • snappy

  • zlib(从 MongoDB 3.6 开始提供)

  • zstd(从 MongoDB 4.2 开始可用)

重要

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

如果指定多个压缩程序,则列出压缩程序的顺序以及通信发起者都很重要。例如,如果mongosh指定以下网络压缩程序zlib,snappymongod指定snappy,zlib ,则mongoshmongod之间的消息使用zlib

如果各方未共享至少一个通用压缩程序,则各方之间的消息将不会被压缩。例如,如果mongosh指定网络压缩程序zlibmongod指定snappy ,则mongoshmongod之间的消息不会被压缩。

--ipv6

启用 IPv 6支持。默认情况下, mongo禁用 IPv 6 。

要通过 IPv 连接到 MongoDB6 集群,您必须在启动--ipv6 --host <mongod/mongos IPv6 address>mongoShell 时同时指定 和 。

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

<db name>

指定要连接的数据库的名称。例如:

mongo admin

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

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

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

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

--enableJavaScriptJIT

4.0 版本中的新功能

启用 JavaScript 引擎的 JIT 编译器。

--disableJavaScriptJIT

在版本4中进行了更改。 0 :现在默认禁用 JavaScript 引擎的 JIT 编译器。

禁用 JavaScript 引擎的 JIT 编译器。

--disableJavaScriptProtection

允许将javascriptjavascriptWithScope(*已弃用*)类型的字段自动编组为mongo Shell 中的 JavaScript 函数。

设置--disableJavaScriptProtection标志后,可以立即执行文档中包含的 JavaScript 函数。以下示例演示了 Shell 中的此行为:

> db.test.insertOne( { _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.insertOne( { _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.jsFunc
object
> doc.jsFunc instanceof Code
true
> doc.jsFunc()
uncaught exception: TypeError: doc.jsFunc is not a function :
@(shell):1:1
<file.js>

指定要运行然后退出的 JavaScript 文件。一般来说,这应该是最后指定的选项。

注意

Optional

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

mongo file.js --username username --password

使用--shell选项可在文件完成运行后返回到 shell。

--authenticationDatabase <dbname>

指定已在其中创建指定--username的身份验证数据库。请参阅身份验证数据库。

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

如果使用GSSAPI (Kerberos)、 PLAIN (LDAP SASL) 或MONGODB-AWS authentication mechanisms ,则必须将--authenticationDatabase设置为$external

--authenticationMechanism <name>

默认值:SCRAM-SHA-1

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

在版本4中进行了更改。 4 :使用 MongoDB 4 。 4 , mongo Shell 添加了在连接到MongoDB Atlas集群时对新的MONGODB-AWS身份验证机制的支持。

说明

RFC7677 使用 SHA-256 哈希函数的标准 Salted 挑战响应身份验证机制。

需将 featureCompatibilityVersion 设为 4.0

4.0 版本中的新功能

MongoDB TLS/SSL 证书身份验证。
MONGODB-AWS
使用 AWS IAM 凭证进行外部身份验证,用于连接到MongoDB Atlas集群。请参阅使用 AWS IAM 档案连接到 MongoDB Atlas 集群。
GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在MongoDB Enterprise中可用。
PLAIN (LDAP SASL)
使用 LDAP 进行外部身份验证。您还可以使用PLAIN对数据库内用户进行身份验证。 PLAIN以纯文本形式传输密码。此机制仅在MongoDB Enterprise中可用。
--gssapiHostName

使用GSSAPI/Kerberos指定服务的主机名。当计算机的主机名与 DNS 解析的主机名不匹配时才需要。

此选项仅在 MongoDB Enterprise 中可用。

--gssapiServiceName

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

此选项仅在 MongoDB Enterprise 中可用。

注意

mongo 禁用对 TLS 1的支持。在使用 TLS 1的系统上进行0加密。 1 + 可用。

提示

请参阅:

为 TLS/SSL 配置 mongodmongos以获取 MongoDB 支持的完整文档。

--tls

4.2 版本中的新增功能

允许连接到已启用 TLS/SSL 支持的mongodmongos

从版本3开始。 2 。 6 ,如果未指定--tlsCAFilenet.tls.CAFile (或其别名--sslCAFilessl.CAFile ),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。在 MongoDB 的早期版本中, mongosh退出并显示无法验证证书的错误。

如果使用 x.509 身份验证,则必须指定 --tlsCAFilenet.tls.CAFile,除非使用 --tlsCertificateSelector--net.tls.certificateSelector

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--tlsCertificateKeyFile <filename>

4.2 版本中的新增功能

指定包含 TLS/SSL 证书和mongo Shell 密钥的.pem文件。使用相对或绝对路径指定.pem文件的文件名。

使用--tls 选项连接到需要 客户端证书mongodmongos 的 或 实例时,需要使用此选项。也就是说,mongo Shell 会向服务器提供此证书。

如果提供的 x,则mongod / mongos会记录连接警告。 509证书会在mongod/mongos主机系统时间后的30天内过期。请参阅x。 509证书即将过期trigger警告以了解更多信息。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--tlsCertificateKeyFilePassword <value>

4.2 版本中的新增功能

指定用于解密证书密钥文件的密码(即--tlsCertificateKeyFile )。

仅当证书密钥文件已加密时才使用--tlsCertificateKeyFilePassword选项。在所有情况下, mongo都会从所有日志记录和报告输出中编辑密码。

如果 PEM 文件中的私钥已加密并且您未指定--tlsCertificateKeyFilePassword选项,则mongo将提示输入密码。请参阅TLS/SSL 证书密码。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--tlsCAFile <filename>

4.2 版本中的新增功能

指定包含来自证书颁发机构的根证书链的.pem文件。此文件用于验证mongod / mongos实例提供的证书。

使用相对或绝对路径指定.pem文件的文件名。

从版本3开始。 2 。 6 ,如果未指定--tlsCAFilenet.tls.CAFile (或其别名--sslCAFilessl.CAFile ),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。在 MongoDB 的早期版本中, mongosh退出并显示无法验证证书的错误。

如果使用 x.509 身份验证,则必须指定 --tlsCAFilenet.tls.CAFile,除非使用 --tlsCertificateSelector--net.tls.certificateSelector

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--tlsCRLFile <filename>

版本 4.2 中的新增功能:在 MongoDB 4.0 及更早版本中,请参阅 --sslCRLFile

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

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

注意

从版本 4.4 开始,为了检查证书吊销状况,MongoDB 默认enables OCSP(在线证书状态协议)作为指定 CRL 文件或使用系统 SSL 证书存储区的替代方法。

--tlsAllowInvalidHostnames

4.2 版本中的新增功能

禁用对mongod / mongos实例提供的证书中的主机名进行验证。即使服务器证书中的主机名与服务器的主机不匹配,也允许mongo连接到 MongoDB 实例。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--tlsAllowInvalidCertificates

4.2 版本中的新增功能

绕过对mongod / mongos实例提供的证书的验证检查,并允许连接到提供无效证书的服务器。

注意

从 MongoDB 4.0 开始,如果您指定以下任意 x.509 身份验证选项,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证:

  • --sslAllowInvalidCertificatesnet.ssl.allowInvalidCertificates: true(MongoDB 4.0 及更高版本)

  • --tlsAllowInvalidCertificatesnet.tls.allowInvalidCertificates: true(MongoDB 4.2 及更高版本)

警告

尽管可用,但请尽可能避免使用 --sslAllowInvalidCertificates 选项。如果需要使用 --sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。

如果mongosh (和其他MongoDB 工具)使用--sslAllowInvalidCertificates选项运行, mongosh (和其他MongoDB 工具)将不会尝试验证服务器证书。这会对过期的mongodmongos证书以及冒充有效mongodmongos实例的外部进程造成漏洞。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅--sslAllowInvalidHostnames

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

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--tlsFIPSMode

4.2 版本中的新增功能

指示mongo使用 TLS/SSL 库的 FIPS 模式。系统必须有符合 FIPS 标准的库,才能使用--tlsFIPSMode选项。

注意

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

--tlsCertificateSelector <parameter>=<value>

4.2 版本中的新增功能:可在 Windows 和 macOS 上作为 --tlsCertificateKeyFile 的替代方案。

--tlsCertificateKeyFile--tlsCertificateSelector选项是互斥的。您只能指定一个。

指定证书属性,以便从操作系统的证书存储中选择匹配的证书。

--tlsCertificateSelector接受格式为<property>=<value>的参数,其中属性可以是以下之一:

属性
值类型
说明
subject
ASCII 字符串
证书上的主题名称或公用名
thumbprint
十六进制字符串

以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。

thumbprint 有时称为 fingerprint

在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。

如果提供的 x,则mongod / mongos会记录连接警告。 509证书会在mongod/mongos主机系统时间后的30天内过期。请参阅x。 509证书即将过期trigger警告以了解更多信息。

--tlsDisabledProtocols <string>

4.2 版本中的新增功能

禁用指定的 TLS 协议。该选项可识别以下协议: TLS1_0TLS1_1TLS1_2 ,并从版本4开始。 0 。 4 (以及3 . 6 . 9和3 . 4 . 24 )、 TLS1_3

  • 在 macOS 上,您无法在禁用 TLS1_1 的情况下,让 TLS1_0TLS1_2 同时启用。您必须至少禁用后两者中的一个,比如 TLS1_0,TLS1_1

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

  • 指定的禁用协议将覆盖任何默认禁用的协议。

从版本4开始。 0 ,MongoDB 禁用 TLS 1 。如果 TLS 1 0 1 + 在系统中可用。启用已禁用的 TLS 1 。 0 ,将none指定为--tlsDisabledProtocols

重要

从版本4开始。 2 ,SSL 选项已弃用。请改用 TLS 对应项。 SSL 协议已弃用,MongoDB 支持 TLS 1 。 0及更高版本。

注意

mongo 禁用对 TLS 1的支持。在使用 TLS 1的系统上进行0加密。 1 + 可用。

--ssl

自版本 4.2 起已被弃用:请改用 --tls

允许连接到已启用 TLS/SSL 支持的mongodmongos

从版本3开始。 2 。 6 ,如果未指定--tlsCAFilenet.tls.CAFile (或其别名--sslCAFilessl.CAFile ),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。在 MongoDB 的早期版本中, mongosh退出并显示无法验证证书的错误。

如果使用 x.509 身份验证,则必须指定 --tlsCAFilenet.tls.CAFile,除非使用 --tlsCertificateSelector--net.tls.certificateSelector

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslPEMKeyFile <filename>

自版本 4.2 起已被弃用:请改用 --tlsCertificateKeyFile

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

使用--ssl 选项连接到启用了mongodmongos CAFile没有 的allowConnectionsWithoutCertificates 或 时,需要使用此选项。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslPEMKeyPassword <value>

自版本 4.2 起已被弃用:请改用 --tlsCertificateKeyFilePassword

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

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

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslCAFile <filename>

自版本 4.2 起已被弃用:请改用 --tlsCAFile

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

从版本3开始。 2 。 6 ,如果未指定--tlsCAFilenet.tls.CAFile (或其别名--sslCAFilessl.CAFile ),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。在 MongoDB 的早期版本中, mongosh退出并显示无法验证证书的错误。

如果使用 x.509 身份验证,则必须指定 --tlsCAFilenet.tls.CAFile,除非使用 --tlsCertificateSelector--net.tls.certificateSelector

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslCertificateSelector <parameter>=<value>

自版本 4.2 起已被弃用:请改用 --tlsCertificateSelector

4.0 版本中的新增功能:可在 Windows 和 macOS 上作为 --tlsCertificateKeyFile 的替代方案。

--tlsCertificateKeyFile--sslCertificateSelector选项是互斥的。您只能指定一个。

指定证书属性,以便从操作系统的证书存储中选择匹配的证书。

--sslCertificateSelector接受格式为<property>=<value>的参数,其中属性可以是以下之一:

属性
值类型
说明
subject
ASCII 字符串
证书上的主题名称或公用名
thumbprint
十六进制字符串

以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。

thumbprint 有时称为 fingerprint

在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。

--sslCRLFile <filename>

自版本 4.2 起已被弃用:请改用 --tlsCRLFile

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

注意

从版本 4.4 开始,为了检查证书吊销状况,MongoDB 默认enables OCSP(在线证书状态协议)作为指定 CRL 文件或使用系统 SSL 证书存储区的替代方法。

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslFIPSMode

自版本 4.2 起已被弃用:请改用 --tlsFIPSMode

指示mongo使用 TLS/SSL 库的 FIPS 模式。系统必须有符合 FIPS 标准的库,才能使用--sslFIPSMode选项。

注意

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

--sslAllowInvalidCertificates

自版本 4.2 起已被弃用:请改用 --tlsAllowInvalidCertificates

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

注意

从 MongoDB 4.0 开始,如果您指定以下任意 x.509 身份验证选项,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证:

  • --sslAllowInvalidCertificatesnet.ssl.allowInvalidCertificates: true(MongoDB 4.0 及更高版本)

  • --tlsAllowInvalidCertificatesnet.tls.allowInvalidCertificates: true(MongoDB 4.2 及更高版本)

警告

尽管可用,但请尽可能避免使用 --sslAllowInvalidCertificates 选项。如果需要使用 --sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。

如果mongosh (和其他MongoDB 工具)使用--sslAllowInvalidCertificates选项运行, mongosh (和其他MongoDB 工具)将不会尝试验证服务器证书。这会对过期的mongodmongos证书以及冒充有效mongodmongos实例的外部进程造成漏洞。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅--sslAllowInvalidHostnames

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

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslAllowInvalidHostnames

自版本 4.2 起已被弃用:请改用 --tlsAllowInvalidHostnames

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

有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置 mongodmongos 以及客户端的 TLS/SSL 配置

--sslDisabledProtocols <string>

自版本 4.2 起已被弃用:请改用 --tlsDisabledProtocols

禁用指定的 TLS 协议。该选项可识别以下协议: TLS1_0TLS1_1TLS1_2 ,并从版本4开始。 0 。 4 (以及3 . 6 . 9 )、 TLS1_3

  • 在 macOS 上,您无法在禁用 TLS1_1 的情况下,让 TLS1_0TLS1_2 同时启用。您必须至少禁用后两者中的一个,比如 TLS1_0,TLS1_1

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

  • 指定的禁用协议将覆盖任何默认禁用的协议。

从版本4开始。 0 ,MongoDB 禁用 TLS 1 。如果 TLS 1 0 1 + 在系统中可用。启用已禁用的 TLS 1 。 0 ,将none指定为--sslDisabledProtocols

版本3中的新增功能。 6 。 5

--retryWrites

版本 3.6 中的新增功能

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

有关会话的更多信息,请参阅客户端会话和因果一致性保证。

--awsAccessKeyId <string>

AWS 访问密钥 ListRead与具有 AWS Key Management Service (KMS) 和 权限的 IAM 用户关联。mongo Shell 使用指定的 访问--awsAccessKeyId KMS。

--awsAccessKeyId为 Shell 会话启用 mongo客户端字段级加密--awsAccessKeyId 需要 。 需要以下 所有 命令行选项:

如果省略--awsAccessKeyId ,则在 Shell 会话中使用Mongo()构造函数来启用客户端字段级加密。

为了降低访问密钥泄漏到日志中的风险,请考虑将环境变量指定为--awsAccessKeyId

--awsSecretAccessKey <string>

AWS 密钥 与指定的--awsAccessKeyId 关联。

--awsSecretAccessKey为 Shell 会话启用 mongo客户端字段级加密--awsSecretAccessKey 需要 。 需要以下 所有 命令行选项:

如果省略--awsSecretAccessKey及其支持选项,则在 Shell 会话中使用Mongo()来启用客户端字段级加密。

为了降低访问密钥泄漏到日志中的风险,请考虑将环境变量指定为--awsSecretAccessKey

--awsSessionToken <string>

AWS 会话令牌 与指定的--awsAccessKeyId 关联。

--awsSessionToken为 Shell 会话启用 mongo客户端字段级加密--awsSessionToken 需要 。 需要以下 所有 命令行选项:

如果省略--awsSessionToken及其支持选项,则在 Shell 会话中使用Mongo()来启用客户端字段级加密。

为了降低访问密钥泄漏到日志中的风险,请考虑将环境变量指定为--awsSessionToken

--keyVaultNamespace <string>

集合的完整命名空间 ( <database>.<collection> ) 用作客户端字段级加密的密钥保管库。启用客户端字段级加密需要--keyVaultNamespace 。用于mongo Shell 会话。如果指定的命名空间不存在,则mongo创建该命名空间。

--keyVaultNamespace需要以下所有命令行选项:

如果省略--keyVaultNamespace及其支持选项,则在 Shell 会话中使用Mongo()构造函数来启用客户端字段级加密。

~/.dbshell

mongo.dbshell文件中维护命令历史记录。

注意

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

~/.mongorc.js

mongo将从调用mongo的用户的主目录中读取.mongorc.js文件。在该文件中,用户可以定义变量、自定义mongo Shell 提示符或更新他们希望在每次启动 Shell 时更新的信息。如果您使用 shell 在命令行上使用mongo --eval或通过将.js 文件指定为 mongo来评估 JavaScript 文件或表达式,则mongo将在 JavaScript 完成处理读取.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 的用户具有读取权限。 的--norc mongo选项仅隐藏用户的.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
mongo.exe在 Windows 上编辑文件时创建。如果文件存在, mongo会将一个从110的整数附加到时间值,以尝试创建唯一文件。
EDITOR

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

HOME

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

HOMEDRIVE

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

HOMEPATH

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

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

键绑定
function
向上箭头
从历史记录中检索上一个命令
向下箭头
从历史记录中检索下一条命令
首页
Go到行首
结束日期
Go行尾
标签
自动完成方法/命令
向左箭头
Go一个字符
右箭头
Go一个字符
Ctrl-向左箭头
Go一个单词
Ctrl-右箭头
Go 一个单词
元向左箭头
Go一个单词
元右箭头
Go 一个单词
Ctrl-A
Go行首
Ctrl-B
Go一个字符
Ctrl-C
退出mongo Shell
Ctrl-D
删除字符(或退出mongo shell)
Ctrl-E
Go到行尾
Ctrl-F
Go一个字符
Ctrl-G
中止
Ctrl-J
接受/评估线路
Ctrl-K
终止/删除该行
Ctrl-L 或键入 cls
清屏
Ctrl-M
接受/评估线路
Ctrl-N
从历史记录中检索下一条命令
Ctrl-P
从历史记录中检索上一个命令
Ctrl-R
反向搜索命令历史记录
Ctrl-S
正向搜索命令历史记录
Ctrl-T
转置字符
Ctrl-U
执行 Unix line-discard
Ctrl-W
执行 Unix 单词删除
Ctrl-Y
同步复制
Ctrl-Z
挂起(作业控制在 Linux 中起作用)
Ctrl-H
向后删除字符
Ctrl-I
完整,与 标签页 相同
Meta-B
Go一个单词
Meta-C
将单词大写
Meta-D
终止词
Meta-F
Go 一个单词
Meta-L
将单词更改为小写
Meta-U
将单词更改为大写
Meta-Y
Yank-pop
Meta-Backspace
向后终止词
Meta-<
检索命令历史记录中的第一条命令
Meta->
检索命令历史记录中的最后一条命令
[1] MongoDB 支持多个键绑定。从2 。 0和mongo包括对基本 emacs 键绑定的支持。

通常,用户会在系统提示符下使用mongo命令来调用 Shell。请考虑以下其他场景的示例。

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

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

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

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

<user><host>替换为适合您情况的值,并根据需要替换或省略--port

如果没有为--password-p命令行选项指定密码, mongo Shell 会提示输入密码。

版本 3.6 中的新增功能

要连接到使用SRV 连接格式描述的副本集,请使用--host选项指定mongo Shell 的连接字符串。在以下示例中,DNS 配置类似于:

Record TTL Class Priority Weight Port Target
_mongodb._tcp.server.example.com. 86400 IN SRV 0 5 27317 mongodb1.example.com.
_mongodb._tcp.server.example.com. 86400 IN SRV 0 5 27017 mongodb2.example.com.

DNS 条目的 TXT 记录包括replicaSetauthSource选项:

Record TTL Class Text
server.example.com. 86400 IN TXT "replicaSet=rs0&authSource=admin"

然后,以下命令将mongo Shell 连接到副本集:

mongo --host "mongodb+srv://server.example.com/?username=allison"

mongo Shell 将自动提示您提供在username选项中指定的用户的密码。

4.4 版本新增

连接到已配置为支持通过 AWS IAM 凭证 进行身份验证的 MongoDB Atlas 集群 ,为 Shell 提供类似于以下内容的 连接字符串 mongo

mongo 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

以这种方式使用 Amazon Web Services IAM 凭证连接到 Atlas 会使用MONGODB-AWS authentication mechanism$external authSource ,如本示例所示。

如果使用 AWS 会话令牌 此外,在AWS_SESSION_TOKENauthMechanismProperties 连接字符串 中为其提供 值,如下所示:

mongo 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'

注意

如果 AWS 访问密钥 ID、秘密访问密钥或会话令牌包含以下字符:

: / ? # [ ] @

这些字符必须使用 百分比编码进行转换。

或者,可以使用--username--password--awsIamSessionToken选项在连接字符串外部提供 AWS 访问密钥 ID、秘密访问密钥和可选会话令牌,如下所示:

mongo 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS' --username <aws access key id> --password <aws secret access key> --awsIamSessionToken <aws session token>

当作为命令行参数提供时,这三个选项无需进行百分号编码。

您还可以使用标准 AWS IAM 环境变量 在您的平台上设置这些凭证 。当您使用 时,mongo ShellMONGODB-AWSauthentication mechanism 会检查以下环境变量:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN

如果设置,则无需在连接字符串中或通过mongo Shell 的显式选项(即--username--password )指定这些档案。

以下示例会在 bash Shell 中设置这些环境变量:

export AWS_ACCESS_KEY_ID='<aws access key id>'
export AWS_SECRET_ACCESS_KEY='<aws secret access key>'
export AWS_SESSION_TOKEN='<aws session token>'

在其他Shell中设置环境变量的事务语法会有所不同。有关更多信息,请参阅适用于您的平台的文档。

您可以使用以下命令验证这些环境变量是否已设置:

env | grep AWS

一旦制定,以下示例将使用这些环境变量连接到 MongoDB Atlas 集群:

mongo 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

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

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

要使用身份验证执行 JavaScript 文件,并提示密码而不是在命令行上提供密码,请使用以下形式:

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

提示

另请参阅:

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

例如,以下操作会计算用于查询collection的 JavaScript 字符串并将结果打印为 JSON。

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

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

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

mongo --eval "db.collection.find().forEach(printjson)"
← mongos