选项
使用以下选项来控制 MongoDB Shell连接和行为的各个方面。
常规选项
--build-info
返回一个 JSON 格式的文档,其中包含有关
mongosh
构建的信息。--eval
评估 JavaScript 表达式。您可以使用单个
--eval
参数或--eval
同时使用多个参数。mongosh
评估参数后--eval
,它将结果打印到您的命令行。如果使用多条--eval
语句,mongosh
只打印最后一条的结果--eval
。示例:格式化输出
要获得适合自动解析的输出,请使用
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/
--help, -h
返回有关MongoDB Shell的选项和使用的信息。
--nodb
防止 shell 连接到任何数据库实例。
--norc
防止 shell~/.mongoshrc.js
在启动时进行采购和评估。
--quiet
跳过启动期间的所有消息(例如欢迎消息和启动警告)并直接转到提示符。
--shell
启用外壳接口。如果你调用mongosh
命令并指定一个 JavaScript 文件作为参数,或者使用 --eval
要在命令行上指定 JavaScript,--shell
选项在文件完成执行后为用户提供 shell 提示。
--verbose
在连接过程中和运行命令时增加 shell 输出的详细程度。
--version
返回MongoDB Shell版本号。
稳定的 API 选项
--apiVersion <version number>
指定api版本. "1"
是目前唯一支持的值。
--apiStrict
指定服务器将响应API严格错误如果您的应用程序使用外部的命令或行为稳定的 API 。如果您指定--apiStrict
,您还必须指定 --apiVersion
.
--apiDeprecationErrors
指定服务器将响应API弃用错误如果您的应用程序使用在指定的apiVersion
.如果您指定--apiDeprecationErrors
,您还必须指定--apiVersion
.
连接选项
--host <hostname>
指定主机名 mongod
或者mongos
在跑。如果未指定,MongoDB Shell会尝试连接到在本地主机上运行的 MongoDB 进程。
要连接到副本集,
指定
replica set name
和集合成员的种子列表。使用以下表格:<replSetName>/<hostname1><:port>,<hostname2><:port>,<...>
对于 TLS/SSL 连接 (
--tls
),MongoDB Shell shell 验证主机名(在
--host
选项或连接字符串)匹配SAN
(或者,如果SAN
不存在,则CN
匹配)mongod
或者mongos
. 如果SAN
存在,则MongoDB Shell与CN
.SAN
如果主机名与(或)不匹配CN
, MongoDB Shell shell 将无法连接。
将连接协议指定为mongodb+srv
,后跟 DNS SRV 主机名记录和任何选项。和选项(如果包含在连接字符串中)会覆盖 TXT 记录中设置的任何相应的 DNS 配置选项authSource
。replicaSet
使用mongodb+srv:
连接字符串隐式为客户端连接启用TLS / SSL(通常设置为)。可以通过在查询字符串中设置来关闭TLStls=true
选项。tls=false
例子:
mongodb+srv://server.example.com/?connectionTimeout=3000ms
--port <port>
指定端口mongod
或者 mongos
实例在听。如果 --port
未指定,MongoDB Shell尝试连接到端口27017
。
TLS 选项
--tls
启用连接到
mongod
或者mongos
启用了TLS / SSL支持。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置--tlsCertificateKeyFile <filename>
指定
.pem
包含TLS / SSL 证书和密钥的文件mongosh
。使用相对或绝对路径指定文件的文件名.pem
。使用时需要此选项--tls
选项连接到mongod
或者mongos
需要的实例客户证书. 也就是说, MongoDB Shell将此证书提供给服务器。笔记:
从 4.4 版开始,
mongod
/mongos
30
如果提供的 x.509 证书在主机系统时间的几天 内过期,则会在连接时记录警告mongod/mongos
。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCertificateKeyFilePassword
指定用于解密证书密钥文件的密码(即 --tlsCertificateKeyFile
).
使用 --tlsCertificateKeyFilePassword
仅当证书密钥文件已加密时才使用该选项。在所有情况下,MongoDB Shell 都会从所有日志记录和报告输出中编辑密码。
如果PEM文件中的私钥是加密的,而你没有指定 --tlsCertificateKeyFilePassword
选项; MongoDB Shell提示输入密码。
要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCAFile <filename>
指定.pem
包含证书颁发机构的根证书链的文件。该文件用于验证由 mongod
/mongos
实例。
使用相对或绝对路径指定文件的文件名.pem
。
要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCRLFile <filename>
指定.pem
包含证书吊销列表的文件。使用相对或绝对路径指定文件的文件名.pem
。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置
--tlsAllowInvalidHostnames
禁用验证证书中的主机名mongod
/mongos
实例。即使服务器证书中的主机名与服务器的主机不匹配,也允许MongoDB Shell连接到 MongoDB 实例。要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置
--tlsAllowInvalidCertificates
4.2版中的新功能。
绕过对提供的证书的验证检查 mongod
/mongos
实例并允许连接到提供无效证书的服务器
笔记:
从 MongoDB 4.0 开始,如果您指定
--tlsAllowInvalidCertificates
使用 x.509 身份验证时,无效证书仅足以建立TLS / SSL连接,但不足以进行身份验证。告警:
尽管可用,但请避免使用
--tlsAllowInvalidCertificates
如果可能的话。如果使用--tlsAllowInvalidCertificates
是必要的,仅在无法入侵的系统上使用该选项。如果MongoDB Shell shell(和其他 MongoDB 工具) 与运行
--tlsAllowInvalidCertificates
选项,外壳(和其他MongoDB 工具) 不要尝试验证服务器证书。这会导致过期漏洞mongod
和mongos
证书以及伪装成有效的外国流程mongod
或者mongos
实例。如果您只需要禁用TLS / SSL证书中主机名的验证,请参阅--tlsAllowInvalidHostnames
.
要了解有关 TLS/SSL 和 MongoDB 的更多信息,请参阅:
--tlsCertificateSelector
在 Windows 和 macOS 上可用,作为替代 --tlsCertificateKeyFile
.
重要的:
Windows 和导入私钥
导入私钥时,必须将其标记为可导出。默认情况下, Windows证书导入向导不选中此选项。
这--tlsCertificateKeyFile
和 --tlsCertificateSelector
选项是互斥的。您只能指定一个。
指定证书属性以便从操作系统的证书库中选择匹配的证书。
--tlsCertificateSelector
接受格式的参数<property>=<value>
,其中属性可以是以下之一:
财产 | 值类型 | 描述 |
---|---|---|
subject |
ASCII 字符串 | 证书上的主题名称或通用名称 |
thumbprint |
十六进制字符串 | 以十六进制表示的字节序列,用于通过其 SHA-1 摘要标识公钥。thumbprint 有时 称为fingerprint 。 |
使用系统 SSL 证书存储时,OCSP(在线证书状态协议)用于验证证书的吊销状态。
笔记:
从 4.4 版开始,
mongod
/mongos
30
如果提供的 x.509 证书在主机系统时间的几天 内过期,则会在连接时记录警告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_0``TLS1_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>
默认值:SCRAM-SHA-1
指定MongoDB Shell用于对mongod
或者mongos
.
笔记:
从 4.0 版开始:
- MongoDB 删除了对已弃用的 MongoDB Challenge-Response (
MONGODB-CR
) 身份验证机制的支持。- MongoDB 使用 SHA-256 哈希函数 (
SCRAM-SHA-256
) 添加了对 SCRAM 机制的支持。
价值 | 描述 |
---|---|
SCRAM-SHA-1 | RFC 5802使用 SHA-1 散列函数的标准 Salted Challenge Response 认证机制。 |
SCRAM-SHA-256 | RFC 7677使用 SHA-256 散列函数的标准 Salted Challenge Response 认证机制。需要将 featureCompatibilityVersion 设置为4.0 。 |
MONGODB-X509 | MongoDB TLS / SSL证书认证。 |
GSSAPI(克伯罗斯) | 使用 Kerberos 的外部身份验证。该机制仅适用于MongoDB 企业版. |
清楚的(LDAPSASL) | 使用 LDAP 的外部身份验证。您还可以用于PLAIN 对数据库内用户进行身份验证。PLAIN 以明文形式传输密码。该机制仅适用于 MongoDB 企业版. |
--gssapiServiceName
使用指定服务的名称 GSSAPI/Kerberos. 仅当服务不使用默认名称mongodb
.
此选项仅在 MongoDB Enterprise 中可用。
--sspiHostnameCanonicalization <string>
指定是否使用主机名规范化。
--sspiHostnameCanonicalization
CANONICALIZE_HOST_NAME:true|false
与在中设置密钥 对具有相 同的效果 authMechanismProperties
的一部分 连接字符串。
如果--sspiHostnameCanonicalization
被设定为:
forwardAndReverse
,执行正向 DNS 查找,然后执行反向查找。1.3.0中的新功能mongosh
。forward
, 效果同设置authMechanismProperties=CANONICALIZE_HOST_NAME:true
。none
, 效果同设置authMechanismProperties=CANONICALIZE_HOST_NAME:false
。
--password <password>, -p <password>
指定用于对使用身份验证的 MongoDB 数据库进行身份验证的密码。结合使用 --username
和 --authenticationDatabase
选项。
要强制MongoDB Shell提示输入密码,请输入 --password
选项作为最后一个选项并省略参数。
--username <username>, -u <username>
指定用于对使用身份验证的 MongoDB 数据库进行身份验证的用户名。结合使用 --password
和 --authenticationDatabase
选项。
会话选项
--retryWrites
启用可重试写入. 可重试写入在mongosh
. 默认情况下,可重试写入在旧版中是禁用的mongo
壳。要禁用可重试写入,请使用--retryWrites=false
.
有关会话的更多信息,请参见客户端会话和因果一致性保证。
客户端字段级加密选项
--awsAccessKeyId <string>
一个AWS 访问密钥与具有 AWS Key Management Service (KMS) 权限的
List
IAM 用户关联。Read
mongosh
使用指定的--awsAccessKeyId
访问 KMS。--awsAccessKeyId
需要启用 客户端字段级加密为了mongosh
外壳会话。--awsAccessKeyId
需要以下两个命令行选项:--awsSecretAccessKey
--keyVaultNamespace
如果--awsAccessKeyId
被省略,使用Mongo()
shell 会话中的构造函数以启用客户端字段级加密。为了减轻将访问密钥泄漏到日志中的风险,请考虑指定一个环境变量以--awsAccessKeyId
.--awsSecretAccessKey <string>
一个AWS 密钥 关联到指定
--awsAccessKeyId
.--awsSecretAccessKey
需要启用 客户端字段级加密为了mongosh
会议。--awsSecretAccessKey
需要以下两个命令行选项:--awsAccessKeyId
--keyVaultNamespace
如果--awsSecretAccessKey
及其支持选项被省略,使用Mongo()
在 shell 会话中启用客户端字段级加密。为了减轻将访问密钥泄漏到日志中的风险,请考虑指定一个环境变量以--awsSecretAccessKey
.--awsSessionToken <string>
一个AWS 会话令牌 关联到指定
--awsAccessKeyId
.--awsSessionToken
需要启用 客户端字段级加密为了mongosh
外壳会话。--awsSessionToken
需要以下所有命令行选项:--awsAccessKeyId
--awsSecretAccessKey
--keyVaultNamespace
如果--awsSessionToken
及其支持选项被省略,使用Mongo()
在 shell 会话中启用客户端字段级加密。为了减轻将访问密钥泄漏到日志中的风险,请考虑指定一个环境变量以--awsSessionToken
.--keyVaultNamespace <string>
<database>.<collection>
用作密钥保管库的集合的完整命名空间 ( )客户端字段级加密.--keyVaultNamespace
是启用客户端字段级加密所必需的。为了mongosh
外壳会话。mongosh
如果指定的命名空间不存在,则创建它。--keyVaultNamespace
需要以下两个命令行选项:--awsAccessKeyId
--awsSecretAccessKey
如果--keyVaultNamespace
及其支持选项被省略,使用Mongo()
shell 会话中的构造函数以启用客户端字段级加密。
翻译:韩鹏帅
原文:Options