使用以下选项从不同方面查看和操控您的 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 控制台。
有关更多详细信息和示例,请参阅从命令行执行脚本。
--no-quiet--quiet禁用非交互式Shell会话的默认 选项模式。指定后,mongosh会在初创企业期间显示所有消息。
--norc阻止 shell 在启动时获取和评估
~/.mongoshrc.js。--norc还会阻止 shell 加载您使用snippet install命令安装的任何代码片段。相反,您可以使用snippet load-all命令加载代码片段。有关更多信息,请参阅代码片段命令。
--quiet跳过启动过程中的所有消息(例如欢迎信息和启动警告),直接跳转到提示符。
对于非交互式Shell会话, MongoDB默认启用
--quiet。您可以使用--no-quiet禁用此行为。
--skipStartupWarnings防止
mongosh在创建会话时显示服务器初创企业警告。要抑制所有初创企业消息,请使用--quiet选项。
Stable API 选项
--apiVersion <version number>指定 apiVersion。
"1"是目前唯一支持的值。
--apiStrict做出如下指定,即,如果应用程序使用 Stable API 以外的命令或行为,则服务器将使用 APIStrictError 进行响应。
如果指定
--apiStrict,则还必须指定--apiVersion。
--apiDeprecationErrors指定如果应用程序使用的命令或行为在指定的 中已弃用,则服务器将使用 APIDeprecationError
apiVersion进行响应。如果指定
--apiDeprecationErrors,则还必须指定--apiVersion。
连接选项
--host <hostname>指定运行
mongod或mongos的主机名称。如果未指定,MongoDB Shell 会尝试连接到本地主机上运行的 MongoDB 进程。- 要连接到副本集,
指定
replica set name和设立成员的种子列表。使用以下形式:<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> - 对于 TLS/SSL 连接(
--tls), - MongoDB Shell 会确保该主机名(在
--host选项或连接字符串中指定)与mongod或mongos所提供证书中的SAN(或者,如果SAN不存在,则为CN)匹配。如果存在SAN,则 MongoDB Shell 与CN不匹配。如果主机名与SAN(或CN)不匹配,MongoDB Shell shell 将无法连接。
- 对于 DNS 种子列表连接、
将连接协议指定为
mongodb+srv,然后指定 DNS SRV 主机名记录和任何选项。authSource和replicaSet选项(如果包含在连接字符串中)将覆盖 TXT记录中设立的任何相应的 DNS 配置选项。使用mongodb+srv:连接字符串隐式启用客户端连接的 TLS(通常使用tls=true设立)。可以通过在查询字符串中设置tls=false来关闭 TLS 选项。例子
mongodb+srv://server.example.com/?connectionTimeoutMS=3000
TLS 选项
--tls启用与已启用 TLS支持的
mongod或mongos的连接。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCertificateKeyFile <filename>指定包含
mongosh的 TLS 证书和密钥的.pem文件。使用相对或绝对路径指定.pem文件的文件名。使用
--tls选项连接到需要客户端证书的mongod或mongos实例时,需要此选项。也就是说, MongoDB Shell向服务器提供此证书。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCertificateKeyFilePassword <value>指定解密证书密钥文件的密码(即
--tlsCertificateKeyFile)。仅当证书密钥文件已加密时才能使用
--tlsCertificateKeyFilePassword选项。在所有情况下,MongoDB Shell 都会对所有日志记录和报告输出中的密码进行脱敏。如果 PEM文件中的私钥已加密并且您未指定 选项; MongoDB
--tlsCertificateKeyFilePasswordShell会提示输入密码。请参阅 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 的更多信息,请参阅:
--tlsAllowInvalidCertificates4.2版本新增。
绕过对
mongod/mongos实例提供的证书的验证检查,并允许连接到提供无效证书的服务器。注意
从MongoDB 4.0 开始,如果您在使用 x.509身份验证时指定
--tlsAllowInvalidCertificates,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。警告
尽管可用,但应尽可能避免使用
--tlsAllowInvalidCertificates选项。如果需要使用--tlsAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。如果MongoDB Shell Shell (和其他 连接到启用 TLS 的副本集)使用
--tlsAllowInvalidCertificates选项运行,则Shell (和其他 连接到启用 TLS 的副本集)不会尝试验证服务器证书。这会对过期的mongod和mongos证书以及冒充有效mongod或mongos实例的外部进程造成漏洞。如果只需禁用 TLS 证书中的主机名验证,请参阅--tlsAllowInvalidHostnames。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCertificateSelector <parameter>=<value>可在Windows和 macOS 上作为
--tlsCertificateKeyFile的替代方案。重要
Windows 与导入私钥
导入私钥时,必须将其标记为可导出。默认情况下,Windows 证书导入向导不会选中此选项。

--tlsCertificateKeyFile和--tlsCertificateSelector选项是互斥的。您只能指定一个。指定证书属性,以便从操作系统的证书存储中选择匹配的证书。
--tlsCertificateSelector<property>=<value>接受格式为 的参数,其中属性可以是以下之一:属性值类型说明subjectASCII 字符串
证书上的主题名称或公用名
thumbprint十六进制字符串
以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。
thumbprint有时称为fingerprint。在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。
--tlsDisabledProtocols <string>禁用指定的 TLS 协议。此选项可识别以下协议:
TLS1_0TLS1_1TLS1_2(从版本 4.0.4 开始,3.6.9、3.4.24)
TLS1_3在 macOS 上,您无法在禁用
TLS1_1的情况下,让TLS1_0和TLS1_2同时启用。您必须至少禁用后两者中的一个,比如TLS1_0,TLS1_1。若要列出多个协议,请指定为逗号分隔的协议列表,例如
TLS1_0,TLS1_1。指定的禁用协议将覆盖任何默认禁用的协议。
从版本4.0 开始,如果系统上有 TLS +, MongoDB将禁用 TLS1.0 1.1。要启用已禁用的 TLS1.0 ,请将
none指定为--tlsDisabledProtocols。
--tlsUseSystemCA允许
mongosh加载操作系统证书颁发机构已经可用的 TLS 证书,而无需向Shell显式指定证书。您无法关闭此行为。仍可设立--tlsUseSystemCA以实现向后兼容,但已无效。注意
此标志应用于 MongoDB 连接和 OIDC 身份提供程序连接。
身份验证选项
--authenticationDatabase <dbname>指定已在其中创建指定
--username的身份验证数据库。请参阅身份验证数据库。如果没有指定 的值, MongoDB
--authenticationDatabaseShell将使用连接字符串中指定的数据库。
--authenticationMechanism <name>指定MongoDB Shell用于向
mongod或mongos进行身份验证的身份验证机制。如果您未指定authenticationMechanism,但提供了用户凭证, MongoDB Shell和驱动程序将尝试使用SCRAM-SHA-256 。如果失败,则会回退到SCRAM-SHA-1 。值说明5802使用 SHA-1 哈希函数的 RFC 标准 Salted 挑战响应身份验证机制。
7677使用 SHA-256 哈希函数的 RFC 标准 Salted 挑战响应身份验证机制。
需将 featureCompatibilityVersion 设为
4.0。MongoDB TLS 证书身份验证。
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(Amazon Web Services IAM)使用Amazon Web Services Identity and Access Management (Amazon Web Services IAM)凭证进行外部身份验证。 MongoDB Enterprise和MongoDB Atlas中提供了此机制。
--gssapiServiceName使用 GSSAPI/ Kerberos指定服务名称。仅当服务不使用默认名称
mongodb时才需要。此选项仅在 MongoDB Enterprise 中可用。
--sspiHostnameCanonicalization <string>指定是否使用主机名规范化。
--sspiHostnameCanonicalizationCANONICALIZE_HOST_NAME:true|falseauthMechanismProperties与在连接字符串的 部分中设置 密钥对的效果相同。如果
--sspiHostnameCanonicalization设立为:forwardAndReverse,执行正向 DNS 查找,然后执行反向查找。mongosh1.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-authmongosh为您提供 URL 和代码以完成身份验证。这被视为安全性较低的 OpenID Connect 流程,但可以在无法打开浏览器的环境中运行mongosh时使用。要将
device-auth设置为auth-code后备选项,请参见以下示例:mongosh 'mongodb://localhost/' --authenticationMechanism MONGODB-OIDC --oidcFlows=auth-code,device-auth
--oidcDumpTokens指定
mongosh是否打印带有额外调试信息的令牌。此选项仅用于调试目的。--oidcDumpTokens选项接受以下值:值说明redacted仅设置
--oidcDumpTokens时的默认。打印标记调试信息,其中敏感数据经过编辑。include-secrets打印令牌调试信息,包括可能用于对数据库服务器进行身份验证的凭证。
重要
include-secrets值会暴露攻击者可用于身份验证的凭证。仅当未经授权的人员无法查看mongosh的输出,且出于诊断目的需要凭证时,才使用此选项。
--oidcIdTokenAsAccessToken指定
mongosh是否使用从身份提供程序收到的 ID 令牌,而不是访问令牌。请将此选项与无法配置为提供 JWT 访问令牌的身份提供程序搭配使用。
--oidcNoNonce默认下,
mongosh在OIDC 授权代码流程期间发送随机数参数。如果设立了
--oidcNoNonce选项,则mongosh不会发送随机数参数。如果您的身份提供程序不支持将随机数值作为授权的一部分,请使用此选项。
--password <password>, -p <password>指定密码,用于对使用身份验证的 MongoDB
--authenticationDatabase--username数据库进行身份验证。与 和 选项结合使用。要强制MongoDB Shell提示输入密码,请输入
--password选项作为最后一个选项,并省略参数。
--username <username>, -u <username>指定用户名,用于对使用身份验证的MongoDB 数据库进行身份验证。与
--password和--authenticationDatabase选项结合使用。
会话选项
--retryWrites启用可重试写入。
默认情况下,可重试写入为:
已启用
mongosh在旧版
mongoshell 中禁用
要禁用可重试写入,请使用
--retryWrites=false。有关会话的更多信息,请参阅客户端会话和因果一致性保证。
字段级加密选项
--awsAccessKeyId <string>与具有 AWS Key Management Service (KMS) 和 权限的 IAM
ListReadmongosh用户关联的 AWS 访问密钥。--awsAccessKeyId使用指定的 访问权限KMS。--awsAccessKeyId需要 才能为mongoshShell会话启用客户端字段级加密。--awsAccessKeyId需要以下两个命令行选项:--awsAccessKeyId如果省略 ,则在Shell会话中使用Mongo()构造函数启用客户端字段级加密。为了降低访问访问权限泄漏到日志中的风险,请考虑将环境变量指定为
--awsAccessKeyId。
--awsSecretAccessKey <string>与指定
--awsAccessKeyId关联的 AWS 密钥。--awsSecretAccessKey需要 才能为mongosh会话启用客户端字段级加密。--awsSecretAccessKey需要以下两个命令行选项:--awsSecretAccessKey如果省略 及其支持选项,则在Shell会话中使用Mongo()启用客户端字段级加密。为了降低访问访问权限泄漏到日志中的风险,请考虑将环境变量指定为
--awsSecretAccessKey。
--awsSessionToken <string>与指定
--awsAccessKeyId关联的 AWS 会话令牌。--awsSessionToken需要 才能为mongoshShell会话启用客户端字段级加密。--awsSessionToken需要以下所有命令行选项:--awsSessionToken如果省略 及其支持选项,则在Shell会话中使用Mongo()启用客户端字段级加密。为了降低访问访问权限泄漏到日志中的风险,请考虑将环境变量指定为
--awsSessionToken。
--keyVaultNamespace <string>集合的完整命名空间 (
<database>.<collection>) 用作客户端字段级加密的密钥库。--keyVaultNamespace用于为mongoshshell 会话启用客户端字段级别加密。 如果指定的命名空间不存在,则mongosh创建该命名空间。--keyVaultNamespace需要以下两个命令行选项:如果省略 及其支持选项,则在Shell会话中使用
--keyVaultNamespaceMongo()构造函数启用客户端字段级加密。