Docs 菜单
Docs 主页
/
MongoDB Shell
/

选项

在此页面上

  • 一般选项
  • Stable API 选项
  • 连接选项
  • TLS 选项
  • 身份验证选项
  • 会话选项
  • 客户端字段级加密选项

使用以下选项从不同方面查看和操控您的 MongoDB Shell 。

--build-info

返回 JSON 格式的文档,其中包含有关 mongosh 版本和驱动程序依赖项的信息。

示例:查看构建信息

您可以通过在终端运行以下命令来检查 mongosh 二进制文件的构建信息和驱动程序依赖关系:

mongosh --build-info

此命令可以返回以下 JSON 格式的文档:

{
version: '1.10.1',
distributionKind: 'packaged',
buildArch: 'x64',
buildPlatform: 'linux',
buildTarget: 'unknown',
buildTime: '2023-06-21T09:49:37.225Z',
gitVersion: '05ad91b4dd40382a13f27abe1ae8c3f9f52a38f7',
nodeVersion: 'v16.20.1',
opensslVersion: '3.1.1',
sharedOpenssl: true,
runtimeArch: 'x64',
runtimePlatform: 'darwin',
deps: {
nodeDriverVersion: '5.6.0'
}
}
--eval <javascript>

评估 JavaScript 表达式。可以使用单个 --eval 参数或同时使用多个 --eval 参数。

mongosh 评估 --eval 参数后,它会将结果打印到命令行中。如果使用多个 --eval 语句,则 mongosh 仅打印最后一个 --eval 的结果。

您可以将 --json 标志与 --eval 一起使用,从而返回扩展 JSON 格式的 mongosh 结果。mongosh 支持 --json=canonical--json=relaxed 两种模式。如果省略模式,mongosh 默认为 canonical 模式。--json 标志与 --shell 互斥。

示例:格式化输出

要获得适合自动解析的输出,请使用 EJSON.stringify()

mongosh --quiet --host rs0/centos1104 --port 27500 \
--eval "EJSON.stringify(rs.status().members.map( \
m => ({'id':m._id, 'name':m.name, 'stateStr':m.stateStr})));" \
| jq

使用 jq 进行解析后,输出如下所示:

[
{
"id": 0,
"name": "centos1104:27500",
"stateStr": "PRIMARY"
},
{
"id": 1,
"name": "centos1104:27502",
"stateStr": "SECONDARY"
},
{
"id": 2,
"name": "centos1104:27503",
"stateStr": "SECONDARY"
}
]

注意

EJSON 内置了格式化选项,无需 jq 等解析器。 例如,以下代码生成的输出格式与上述相同。

mongosh --quiet --host rs0/centos1104 --port 27500 \
--eval "EJSON.stringify( rs.status().members.map( \
({ _id, name, stateStr }) => ({ _id, name, stateStr })), null, 2);"

示例:多个 --eval 参数

要获取 moviesDatabase 中的集合列表,请使用多个 --eval 语句:

mongosh --quiet \
--eval 'use moviesDatabase' \
--eval 'show collections' \
mongodb://localhost/

示例:--json 选项

要使用多个 --eval 声明以扩展 JSON 格式返回有关集合的统计信息,请执行以下操作:

mongosh --quiet --json=relaxed \
--eval 'use <database-name>' \
--eval 'db.<collection>.stats()' \
mongodb://localhost/
--file, -f <javascript>

从命令行执行脚本,而无需进入 MongoDB Shell 控制台。

有关更多详细信息和示例,请参阅从命令行执行脚本。

--help, -h

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

--nodb

阻止 Shell 连接到任何数据库实例。

--norc

阻止 shell 在启动时获取和评估~/.mongoshrc.js

--quiet

跳过启动过程中的所有消息(例如欢迎信息和启动警告),直接跳转到提示符。

--shell

启用 shell 接口。如果调用 mongosh 命令并指定 JavaScript 文件作为参数,或者在命令行中使用 --eval 指定 JavaScript,--shell 选项会在文件完成执行后为用户提供 shell 提示符。--shell 标志与 --json 互斥。

--verbose

提高在连接过程中以及运行命令时 shell 输出信息的详细程度。

--version

返回 MongoDB Shell 版本号。

--apiVersion <version number>

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

--apiStrict

做出如下指定,即,如果应用程序使用 Stable API 以外的命令或行为,则服务器将使用 APIStrictError 进行响应。

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

--apiDeprecationErrors

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

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

--host <hostname>

指定运行 mongodmongos 的主机的名称。如果未指定,MongoDB Shell 会尝试连接到本地主机上运行的 MongoDB 进程。

要连接到副本集,

指定 replica set name 和副本集节点的种子列表。请使用以下形式:

<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>
对于 TLS/SSL 连接 (--tls),
MongoDB Shell 会验证主机名(在 --host 选项或连接字符串中指定)是否与 mongodmongos 提供的证书中的 SAN(或者,如果 SAN 不存在,则为 CN)相匹配。如果存在 SAN,则 MongoDB Shell 与 CN 不匹配。如果主机名与 SAN(或 CN)不匹配,则 MongoDB Shell shell 将无法连接。
对于 DNS 种子列表连接

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

例子

mongodb+srv://server.example.com/?connectionTimeoutMS=3000
--port <port>

指定 mongodmongos 实例正在监听的端口。如果 --port 未指定,MongoDB Shell 会尝试连接到端口 27017

--tls

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

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsCertificateKeyFile <filename>

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

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

注意

从版本 4.4 开始,如果提供的 x.509 证书在 mongod/mongos 主机系统时间的 30 天内过期,则 mongod / mongos 会在连接时记录警告。

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsCertificateKeyFilePassword <value>

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

仅在证书密钥文件已加密的情况下使用 --tlsCertificateKeyFilePassword 选项。在所有情况下,MongoDB Shell 都会对所有日志记录和报告输出中的密码进行脱敏。

如果 PEM 文件中的私钥已加密且未指定 --tlsCertificateKeyFilePassword 选项,则 MongoDB Shell 会提示输入密码。

请参阅 TLS/SSL 证书密码。

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsCAFile <filename>

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

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

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsCRLFile <filename>

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

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsAllowInvalidHostnames

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

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsAllowInvalidCertificates

4.2 版本中的新增功能

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

注意

从 MongoDB 4.0 开始,如果您在使用 x.509 身份验证时指定 --tlsAllowInvalidCertificates,无效证书仅足以建立 TLS / SSL 连接,但不足以 进行身份验证。

警告

尽管可以使用,但应尽量避免使用 --tlsAllowInvalidCertificates 选项。如果必须使用 --tlsAllowInvalidCertificates,则应当仅在不可能发生入侵的系统上使用该选项。

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

要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:

--tlsCertificateSelector <parameter>=<value>

可在 Windows 和 macOS 上用作 --tlsCertificateKeyFile 的替代方案。

重要

Windows 与导入私钥

导入私钥时,必须将其标记为可导出。默认情况下,Windows 证书导入向导不会选中此选项。

Microsoft 证书导入向导,其中键标记为可导出

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

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

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

属性
值类型
说明

subject

ASCII 字符串

证书上的主题名称或公用名

thumbprint

十六进制字符串

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

thumbprint 有时称为 fingerprint

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

注意

从版本 4.4 开始,如果提供的 x.509 证书在 mongod/mongos 主机系统时间的 30 天内过期,则 mongod / mongos 会在连接时记录警告。

--tlsDisabledProtocols <string>

禁用指定的 TLS 协议。此选项可识别以下协议:

  • TLS1_0

  • TLS1_1

  • TLS1_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 开始,如果系统支持 TLS 1.1+,MongoDB 将禁用 TLS 1.0。要启用已禁用的 TLS 1.0,请将 none 指定为 --tlsDisabledProtocols.

--tlsUseSystemCA

允许 mongosh 加载操作系统证书颁发机构可用的 TLS 证书。如果要使用操作系统已经可用的 TLS 证书,而不需要在 mongosh 中显式指定这些证书,请使用此选项。

--authenticationDatabase <dbname>

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

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

--authenticationMechanism <name>

指定 MongoDB Shell 用来对 mongodmongos 进行身份验证的机制。如果不指定 authenticationMechanism 但提供用户凭证,MongoDB Shell 和驱动程序将尝试使用 SCRAM-SHA-256。如果失败,则会回退到 SCRAM-SHA-1。

说明

RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism

需将 featureCompatibilityVersion 设为 4.0

MongoDB TLS/SSL 证书身份验证。

GSSAPI (Kerberos)

使用 Kerberos 的外部身份验证。此机制仅在 MongoDB Enterprise 中可用。

普通版 (LDAP SASL)

使用LDAP进行外部身份验证。您还可以使用PLAIN 对数据库内用户进行身份验证。PLAIN 以纯文本形式传输密码。 MongoDB Enterprise和MongoDB Atlas中提供了此机制。

MONGODB-OIDC (OpenID Connect)

使用 OpenID Connect 进行外部身份验证。 MongoDB Enterprise和MongoDB Atlas中提供了此机制。

MONGODB-AWS (AWS IAM)

使用Amazon Web Services Identity and Access Management (AWS IAM) 档案进行外部身份验证。 MongoDB Enterprise和MongoDB Atlas中提供了此机制。

--gssapiServiceName

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

此选项仅在 MongoDB Enterprise 中可用。

--sspiHostnameCanonicalization <string>

指定是否使用主机名规范化。

--sspiHostnameCanonicalization 与在连接字符串authMechanismProperties 部分设置 CANONICALIZE_HOST_NAME:true|false 密钥对具有相同效果。

如果 --sspiHostnameCanonicalization 设置为:

  • forwardAndReverse,执行正向 DNS 查找,然后执行反向查找。mongosh 1.3.0 中的新增功能。

  • forward,效果与设置 authMechanismProperties=CANONICALIZE_HOST_NAME:true 相同。

  • none,效果与设置 authMechanismProperties=CANONICALIZE_HOST_NAME:false 相同。

--oidcFlows

在逗号分隔列表中指定 OpenID Connect 流程。OpenID Connect 流程指定mongosh如何与身份提供商交互以进行身份验证过程。mongosh支持以下 OpenID Connect 流程:

OpenID Connect 流程
说明

auth-code

默认。mongosh 打开浏览器,并将您重定向到身份提供商登录屏幕。

device-auth

mongosh 为您提供 URL 和代码以完成身份验证。这被视为安全性较低的 OpenID Connect 流程,但可以在无法打开浏览器的环境中运行 mongosh 时使用。

要将 device-auth 设置为 auth-code 后备选项,请参见以下示例:

mongosh 'mongodb://localhost/' --authenticationMechanism MONGODB-OIDC --oidcFlows=auth-code,device-auth
--oidcIdTokenAsAccessToken

指定mongosh 是否使用从身份提供商收到的ID令牌而不是访问权限令牌。将此选项与您无法配置为提供 JWT访问权限令牌的身份提供程序一起使用。

--oidcRedirectUri

指定身份提供商在身份验证后将您重定向的 URI。URI 必须与身份提供商的配置匹配。默认为 http://localhost:27097/redirect

--oidcTrustedEndpoint

指定与非 Atlas 或本地主机的受信任终结点的连接。仅在连接到您信任的服务器时使用此选项。

--browser

指定启用 MONGODB-OIDCmongosh 将您重定向到的浏览器。

此选项与系统 Shell 一起运行。

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

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

要强制 MongoDB Shell 提示输入密码,请输入 --password 选项作为最后一个选项,并省略参数。

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

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

--retryWrites

启用可重试写入

默认情况下,可重试写入为:

  • 已启用 mongosh

  • 在旧版 mongo shell 中禁用

要禁用可重试写入功能,请使用 --retryWrites=false

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

--awsAccessKeyId <string>

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

需要 --awsAccessKeyId 来启用客户端字段级加密,以便进行 mongosh shell 会话。--awsAccessKeyId需要以下两个命令行选项:

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

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

--awsSecretAccessKey <string>

与指定 --awsAccessKeyId 关联的 AWS 私有密钥

需要 --awsSecretAccessKey 来启用客户端字段级加密,以便进行 mongosh 会话。--awsSecretAccessKey 需要以下两个命令行选项:

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

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

--awsSessionToken <string>

一个 AWS 会话令牌,与指定的 --awsAccessKeyId 相关联。

需要 --awsSessionToken 来启用客户端字段级加密,用于 mongosh shell 会话。--awsSessionToken 需要以下所有命令行选项:

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

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

--keyVaultNamespace <string>

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

--keyVaultNamespace 需要以下两个命令行选项:

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

后退

.mongoshrc 配置文件