注意
mongo shell 在 MongoDB v5.0 中已被弃用。替换为 mongosh。
较旧的 mongo shell 文档包含在该 MongoDB 版本的相应文档中。
先前版本的快速链接
有关更多信息,请参阅 mongo shell和 mongosh的比较。
说明
mongo是 的交互式JavaScriptshell MongoDB接口,它为系统管理员提供了功能强大的接口,并为开发人员提供了直接使用数据库测试查询和操作的方法。mongo还提供了一个功能齐全的 JavaScript 环境,可与 MongoDB 一起使用。
mongo shell作为MongoDB服务器安装的一部分包含在内。 如果您已经安装了服务器,则mongo shell将安装到与服务器二进制文件相同的位置。
或者,如果您想从mongoshell MongoDB Server单独下载 ,则可以按照以下步骤将该shell 作为独立运行的包安装:
访问您所用 MongoDB 版本的下载中心:
从下拉菜单中选择您首选的 Version和Platform 。
根据您的平台选择要下载的Package :
将
mongoshell从存档复制到文件系统上的某个位置。
有关特定于您的平台的其他安装指导,或要将mongo shell作为MongoDB Server安装的一部分进行安装,请参阅适用于您的平台的安装指南。
语法
您可以使用默认设置运行不带任何命令行选项的
mongoshell :mongo 您可以使用指定主机和端口以及其他连接选项的
mongoshell 连接string 运行 。例如,以下内容包括tls:mongo "mongodb://mongodb0.example.com:27017/testdb?tls=true" tls选项从 MongoDB 4.2开始可用。 在早期版本中,使用ssl选项。要将
mongoshell连接到副本集,您可以在连接string中指定副本集成员和名称:mongo "mongodb://mongodb0.example.com.local:27017,mongodb1.example.com.local:27017,mongodb2.example.com.local:27017/?replicaSet=replA" 有关连接string选项的更多信息,请参阅连接字符串。
您可以使用各种命令行选项运行
mongoshell 。 例如: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中连接到数据库,请参阅“打开新连接”。
--host <hostname>指定运行
mongod或mongos的托管的名称。 如果未指定,mongo会尝试连接到本地主机上运行的MongoDB进程。- 要连接到副本集,
指定
replica set name和设立成员的种子列表。 使用以下形式:<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> - 对于 TLS/SSL 连接 (
--ssl), mongosh验证主机名(在--host选项或连接string 中指定)是否与SANSANCNmongod或mongos。如果SAN存在,则mongosh与CN不匹配。 如果主机名与SAN(或CN)不匹配,mongosh将无法连接MongoDB 4 。 2 ,在执行 SAN 比较时, MongoDB支持比较 DNS 名称或IP地址。 在以前的版本中, MongoDB仅支持 DNS 名称的比较。- 对于DNS 种子列表连接,
将连接协议指定为
mongodb+srv,然后是 DNS SRV 主机名记录和任何选项。authSource和replicaSet选项(如果包含在连接string中)将覆盖 TXT 记录中设置的任何相应的 DNS 配置选项。 使用mongodb+srv:连接string隐式启用客户端连接的 TLS/SSL(通常使用ssl=true设置)。 可以通过在查询string中设置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 mechanismAmazon Web ServicesID集群,请在此字段或 连接 中指定您的string 访问权限密钥 。或者,该值也可以作为环境变量AWS_ACCESS_KEY_ID提供。 请参阅 使用MongoDB Atlas Amazon Web ServicesIAM 档案连接到 集群。
--password <password>, -p <password>指定密码,用于对使用 身份验证 的MongoDB 数据库进行身份验证。 与
--username和--authenticationDatabase选项结合使用。 要强制mongo提示输入密码,请输入--password选项作为最后一个选项,并省略参数。如果使用MongoDB Atlas 连接到
MONGODB-AWSauthentication mechanismAmazon Web Services集群,请在此字段或 连接string 中指定您的 秘密访问权限密钥。或者,该值也可以作为环境变量AWS_SECRET_ACCESS_KEY提供。 请参阅 使用MongoDB Atlas Amazon Web ServicesIAM 档案连接到 集群。
--apiVersion <version number>版本 5.0 中的新增功能。
指定apiVersion 。
"1"是目前唯一支持的值。
--apiStrict版本 5.0 中的新增功能。
指定如果应用程序使用 之外的命令或行为,服务器将使用 APIStrictErrorStable API 进行响应。
如果指定
--apiStrict,则还必须指定--apiVersion。
--apiDeprecationErrors版本 5.0 中的新增功能。
指定如果应用程序使用的命令或行为在指定 apiVersion 中已弃用,服务器将使用APIDeprecationError进行响应。
如果指定
--apiDeprecationErrors,则还必须指定--apiVersion。
--awsIamSessionToken <aws session token>如果使用MongoDB Atlas
MONGODB-AWSauthentication mechanismAmazon Web Services连接到ID 集群,除了 访问密钥 和秘密访问密钥之外,还使用会话令牌,请在此字段中指定您的Amazon Web Services 会话令牌,或在 连接string 中指定。或者,该值也可以作为环境变量AWS_SESSION_TOKEN提供。 请参阅 使用MongoDB Atlas cluster Amazon Web ServicesIAM 档案连接到 。仅在使用
MONGODB-AWSauthentication mechanism时有效。
--help, -h返回
mongo的选项和使用的信息。
--version返回
mongo版本号。
--networkMessageCompressors <string>版本 3.4 中的新增功能。
为此
mongoshell与以下对象之间的通信启用网络压缩:您可以指定以下压缩程序:
重要
当双方都启用网络压缩时,消息就会被压缩。否则,各方之间的消息不会被压缩。
如果指定多个压缩程序,则列出压缩程序的顺序与通信发起者都很重要。例如,如果
mongosh指定以下网络压缩程序zlib,snappy且mongod指定snappy,zlib,则在mongosh和mongod之间的消息使用zlib。如果各方未分享至少一个通用压缩程序,则各方之间的消息将不会被压缩。例如,如果
mongosh指定网络压缩程序zlib且mongod指定snappy,则mongosh与mongod之间的消息将不会被压缩。
--ipv6启用 IPv 6支持。 默认,
mongo禁用 IPv 6 。要通过MongoDB IPv 连接到6 集群,您必须在启动 时同时指定
--ipv6--host <mongod/mongos IPv6 address>和mongoshell 。默认,
mongod和mongos禁用 IPv 6支持。--ipv6在连接到 时指定mongod/mongos不会启用对6 的 IPvmongod/mongos支持。有关在mongod/mongos上启用 IPv 6支持的文档,请参阅net.ipv6。
<db name>指定要连接的数据库的名称。 示例:
mongo admin 上述命令会将
mongoshell MongoDB连接到本地计算机上运行的 部署的 管理员数据库 。您可以使用可解析的主机名或IP解决指定远程数据库实例。 使用/字符将数据库名称与主机名分隔开。 请参阅以下示例:mongo mongodb1.example.net/test mongo mongodb1/admin mongo 10.8.8.10/test 此语法是连接到特定数据库的唯一方法。
--disableJavaScriptProtection允许JavaScript 和 javascriptWithScope(*已弃用*) 类型的字段自动编组为JavaScript 中的
mongoshell 函数。设立
--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将使用连接string中指定的数据库。如果使用GSSAPI (Kerberos)、 PLAIN (LDAP SASL) 或
MONGODB-AWSauthentication mechanisms,则必须将--authenticationDatabase设置为$external。
--authenticationMechanism <name>默认值:SCRAM-SHA-1
指定
mongo实例用于向mongod或mongos进行身份验证的身份验证机制。在版本4.4中进行了更改: 对于MongoDB 4.4,
mongoshell在连接到MongoDB Atlas集群时增加了对新的MONGODB-AWS身份验证机制的支持。值说明5802使用 SHA-1 哈希函数的 RFC 标准 Salted 挑战响应身份验证机制。
RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism
需将 featureCompatibilityVersion 设为
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 中可用。
TLS 选项
注意
mongo 在支持 TLS 1.1 + 的系统上禁用对 TLS 1.0加密的支持。
--tls4.2 版本中的新增功能。
允许连接到已启用 TLS/SSL 支持的
mongod或mongos。如果未指定
--tlsCAFile或net.tls.CAFile(或其别名--sslCAFile或ssl.CAFile),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。 在MongoDB的早期版本中,mongosh退出并显示无法验证证书的错误。如果使用 x.509 身份验证,则必须指定
--tlsCAFile或net.tls.CAFile,除非使用--tlsCertificateSelector或--net.tls.certificateSelector。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--tlsCertificateKeyFile <filename>4.2 版本中的新增功能。
指定包含 TLS/SSL 证书和
mongoshell密钥的.pem文件。 使用相对或绝对路径指定.pem文件的文件名。使用
--tls选项连接到需要 客户端证书mongodmongos的 或 实例时,需要使用此选项。也就是说,mongoshell会向服务器提供此证书。如果显示的 x.509 证书在
mongod/mongos主机系统时间后的30天内过期,则mongod/mongos会在连接时记录警告。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--tlsCertificateKeyFilePassword <value>4.2 版本中的新增功能。
指定解密证书密钥文件的密码(即
--tlsCertificateKeyFile)。仅当证书密钥文件已加密时才使用
--tlsCertificateKeyFilePassword选项。 在所有情况下,mongo都会从所有日志记录和报告输出中编辑密码。如果 PEM 文件中的私钥已加密并且您未指定
--tlsCertificateKeyFilePassword选项,则mongo将提示输入密码。 请参阅TLS/SSL 证书密码。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--tlsCAFile <filename>4.2 版本中的新增功能。
指定包含来自证书颁发机构的根证书链的
.pem文件。 此文件用于验证mongod/mongos实例提供的证书。使用相对或绝对路径指定
.pem文件的文件名。如果未指定
--tlsCAFile或net.tls.CAFile(或其别名--sslCAFile或ssl.CAFile),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。 在MongoDB的早期版本中,mongosh退出并显示无法验证证书的错误。如果使用 x.509 身份验证,则必须指定
--tlsCAFile或net.tls.CAFile,除非使用--tlsCertificateSelector或--net.tls.certificateSelector。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--tlsCRLFile <filename>版本 4.2 中的新增功能:在 MongoDB 4.0 及更早版本中,请参阅
--sslCRLFile指定包含证书吊销列表的
.pem文件。使用相对或绝对路径指定.pem文件的文件名。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。注意
从版本 4.4 开始,为了检查证书吊销状况,MongoDB 默认
enablesOCSP(在线证书状态协议)作为指定 CRL 文件或使用系统 SSL 证书存储区的替代方法。
--tlsAllowInvalidHostnames4.2 版本中的新增功能。
禁用对
mongod/mongos实例提供的证书中的主机名进行验证。 即使服务器证书中的主机名与服务器的主机不匹配,也允许mongo连接到 MongoDB 实例。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--tlsAllowInvalidCertificates4.2 版本中的新增功能。
绕过对
mongod/mongos实例提供的证书的验证检查,并允许连接到提供无效证书的服务器。注意
如果您指定
--tlsAllowInvalidCertificates或net.tls.allowInvalidCertificates: true,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。警告
尽管可用,但请尽可能避免使用
--sslAllowInvalidCertificates选项。如果需要使用--sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。如果
mongosh(和其他MongoDB工具)使用--sslAllowInvalidCertificates选项运行,mongosh(和其他MongoDB工具)将不会尝试验证服务器证书。 这会对过期的mongod和mongos证书以及冒充有效mongod或mongos实例的外部进程造成漏洞。 如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅--sslAllowInvalidHostnames。使用
ssl.allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--tlsFIPSMode4.2 版本中的新增功能。
指示
mongo使用 TLS/SSL 库的 FIPS 模式。 系统必须有符合 FIPS 标准的库,才能使用--tlsFIPSMode选项。注意
只有 MongoDB Enterprise 支持与 FIPS 兼容的 TLS/SSL。有关更多信息,请参阅为 FIPS 配置 MongoDB 。
--tlsCertificateSelector <parameter>=<value>4.2 版本中的新增功能:可在 Windows 和 macOS 上作为
--tlsCertificateKeyFile的替代方案。--tlsCertificateKeyFile和--tlsCertificateSelector选项是互斥的。您只能指定一个。指定证书属性,以便从操作系统的证书存储中选择匹配的证书。
--tlsCertificateSelector接受格式为<property>=<value>的参数,其中属性可以是以下之一:属性值类型说明subjectASCII 字符串
证书上的主题名称或公用名
thumbprint十六进制字符串
以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。
thumbprint有时称为fingerprint。在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。
如果显示的 x.509 证书在
mongod/mongos主机系统时间后的30天内过期,则mongod/mongos会在连接时记录警告。
--tlsDisabledProtocols <string>4.2 版本中的新增功能。
禁用指定的 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.。
SSL 选项(已弃用)
重要
从版本4.2开始,SSL 选项已弃用。 请改用 TLS 对应项。 SSL协议已弃用, MongoDB支持 TLS 1.0及更高版本。
注意
mongo 在支持 TLS 1.1 + 的系统上禁用对 TLS 1.0加密的支持。
--ssl自版本 4.2 起已被弃用:请改用
--tls。允许连接到已启用 TLS/SSL 支持的
mongod或mongos。如果未指定
--tlsCAFile或net.tls.CAFile(或其别名--sslCAFile或ssl.CAFile),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。 在MongoDB的早期版本中,mongosh退出并显示无法验证证书的错误。如果使用 x.509 身份验证,则必须指定
--tlsCAFile或net.tls.CAFile,除非使用--tlsCertificateSelector或--net.tls.certificateSelector。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslPEMKeyFile <filename>自版本 4.2 起已被弃用:请改用
--tlsCertificateKeyFile。指定同时包含 TLS/SSL 证书和密钥的
.pem文件。使用相对或绝对路径指定.pem文件的文件名。使用
--ssl选项连接到启用了mongod且mongos没有 的 或ssl.CAFilessl.allowConnectionsWithoutCertificates时,需要使用此选项。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslPEMKeyPassword <value>自版本 4.2 起已被弃用:请改用
--tlsCertificateKeyFilePassword。指定解密证书密钥文件的密码(即
--sslPEMKeyFile)。 仅当证书密钥文件已加密时才使用--sslPEMKeyPassword选项。 在所有情况下,mongo都会从所有日志记录和报告输出中编辑密码。如果 PEM 文件中的私钥已加密并且您未指定
--sslPEMKeyPassword选项,则mongo将提示输入密码。 请参阅TLS/SSL 证书密码。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslCAFile <filename>自版本 4.2 起已被弃用:请改用
--tlsCAFile。指定包含来自证书颁发机构的根证书链的
.pem文件。使用相对或绝对路径指定.pem文件的文件名。如果未指定
--tlsCAFile或net.tls.CAFile(或其别名--sslCAFile或ssl.CAFile),则在连接到启用 TLS/SSL 的服务器时将使用系统范围的 CA 证书存储区。 在MongoDB的早期版本中,mongosh退出并显示无法验证证书的错误。如果使用 x.509 身份验证,则必须指定
--tlsCAFile或net.tls.CAFile,除非使用--tlsCertificateSelector或--net.tls.certificateSelector。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslCertificateSelector <parameter>=<value>自版本 4.2 起已被弃用:请改用
--tlsCertificateSelector。4.0 版本中的新增功能:可在 Windows 和 macOS 上作为
--tlsCertificateKeyFile的替代方案。--tlsCertificateKeyFile和--sslCertificateSelector选项是互斥的。您只能指定一个。指定证书属性,以便从操作系统的证书存储中选择匹配的证书。
--sslCertificateSelector接受格式为<property>=<value>的参数,其中属性可以是以下之一:属性值类型说明subjectASCII 字符串
证书上的主题名称或公用名
thumbprint十六进制字符串
以十六进制表示的字节序列,用于通过 SHA-1 摘要识别公钥。
thumbprint有时称为fingerprint。在使用系统 SSL 证书存储区时,会用 OCSP(在线证书状态协议)来验证证书的吊销状态。
--sslCRLFile <filename>自版本 4.2 起已被弃用:请改用
--tlsCRLFile。指定包含证书吊销列表的
.pem文件。使用相对或绝对路径指定.pem文件的文件名。注意
从版本 4.4 开始,为了检查证书吊销状况,MongoDB 默认
enablesOCSP(在线证书状态协议)作为指定 CRL 文件或使用系统 SSL 证书存储区的替代方法。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslFIPSMode自版本 4.2 起已被弃用:请改用
--tlsFIPSMode。指示
mongo使用 TLS/SSL 库的 FIPS 模式。 系统必须有符合 FIPS 标准的库,才能使用--sslFIPSMode选项。注意
只有 MongoDB Enterprise 支持与 FIPS 兼容的 TLS/SSL。有关更多信息,请参阅为 FIPS 配置 MongoDB 。
--sslAllowInvalidCertificates自版本 4.2 起已被弃用:请改用
--tlsAllowInvalidCertificates。绕过对服务器证书的验证检查,并允许使用无效证书进行连接。
注意
如果您指定
--tlsAllowInvalidCertificates或net.tls.allowInvalidCertificates: true,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。警告
尽管可用,但请尽可能避免使用
--sslAllowInvalidCertificates选项。如果需要使用--sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。如果
mongosh(和其他MongoDB工具)使用--sslAllowInvalidCertificates选项运行,mongosh(和其他MongoDB工具)将不会尝试验证服务器证书。 这会对过期的mongod和mongos证书以及冒充有效mongod或mongos实例的外部进程造成漏洞。 如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅--sslAllowInvalidHostnames。使用
ssl.allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslAllowInvalidHostnames自版本 4.2 起已被弃用:请改用
--tlsAllowInvalidHostnames。禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持
mongo连接到 MongoDB 实例。有关 TLS/SSL 和 MongoDB 的详细信息,请参阅为 TLS/SSL 配置
mongod和mongos以及客户端的 TLS/SSL 配置。
--sslDisabledProtocols <string>自版本 4.2 起已被弃用:请改用
--tlsDisabledProtocols。禁用指定的 TLS 协议。 该选项可识别以下协议:
TLS1_0、TLS1_1、TLS1_2,并且从版本4.0.4开始 (和3.6.9 ),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指定为--sslDisabledProtocols.。3.6.5版本新增。
会话
--retryWrites版本 3.6 中的新增功能。
在
mongoshell中为会话默认启用可重试写入。有关会话的更多信息,请参阅客户端会话和因果一致性保证。
客户端字段级加密选项
--awsAccessKeyId <string>与具有Amazon Web Services KMS (KMS )
List和Read权限的 IAM 用户关联的Amazon Web Services访问密钥。mongoShell使用指定的--awsAccessKeyId访问权限KMS。--awsAccessKeyId为 会话启用 客户端字段级加密mongoshell需要 。--awsAccessKeyId需要以下所有命令行选项:--awsAccessKeyId如果省略 ,则在 会话中使用Mongo()shell构造函数启用客户端字段级加密。为降低访问密钥泄漏到日志中的风险,可考虑将环境变量指定为
--awsAccessKeyId。
--awsSecretAccessKey <string>--awsAccessKeyId与指定. 关联的Amazon Web Services 密钥 。--awsSecretAccessKey为 会话启用 客户端字段级加密mongoshell需要 。--awsSecretAccessKey需要以下所有命令行选项:--awsSecretAccessKey如果省略 及其支持选项,则在 会话中使用Mongo()shell来启用客户端字段级加密。为降低访问密钥泄漏到日志中的风险,可考虑将环境变量指定为
--awsSecretAccessKey。
--awsSessionToken <string>与指定的
--awsAccessKeyId。 关联的Amazon Web Services 会话令牌 。--awsSessionToken为 会话启用 客户端字段级加密mongoshell需要 。--awsSessionToken需要以下所有命令行选项:--awsSessionToken如果省略 及其支持选项,则在 会话中使用Mongo()shell来启用客户端字段级加密。为降低访问密钥泄漏到日志中的风险,可考虑将环境变量指定为
--awsSessionToken。
--keyVaultNamespace <string>集合的完整命名空间(
<database>.<collection>) 用作客户端字段级加密的密钥保管库。 启用客户端字段级加密需要--keyVaultNamespace。 用于mongoshell会话。 如果指定的命名空间不存在,则mongo创建该命名空间。--keyVaultNamespace需要以下所有命令行选项:如果省略
--keyVaultNamespace及其支持选项,则在会话中使用Mongo()shell构造函数来启用客户端字段级加密。
的知识
~/.dbshellmongo在.dbshell文件中维护命令历史记录。注意
mongo不会在历史记录文件中记录与身份验证相关的交互,包括authenticate和db.createUser()。
~/.mongorc.jsmongo将从调用mongo的用户的主目录中读取.mongorc.js文件。 在该文件中,用户可以定义变量、自定义mongoshell提示符或更新他们希望在每次启动shell时更新的信息。 如果您使用shell JavaScript在命令行上使用 或通过mongo --eval为 指定 .js文件mongo 来评估mongo文件或表达式,则.mongorc.js将在JavaScript 完成处理 后 读取 文件。指定
--norc选项以禁用读取.mongorc.js。
/etc/mongorc.jsmongoshell在启动时评估的全局mongorc.js文件。 如果用户在HOME目录中还有一个.mongorc.js文件,则mongoshell会在评估用户的.mongorc.js文件之前评估全局/etc/mongorc.js文件。/etc/mongorc.js必须对运行shell的用户具有读取权限。 的--norcmongo选项仅隐藏用户的.mongorc.js文件。在Windows上,全局
mongorc.js </etc/mongorc.js>存在于%ProgramData%\MongoDB目录中。/tmp/mongo_edit{<time_t>}.js- 由
mongo在编辑文件时创建。 如果文件存在,mongo会将一个从1到10的整数附加到时间值,以尝试创建唯一文件。 %TEMP%mongo_edit{<time_t>}.js- 在Windows上由
mongo.exe在编辑文件时创建。 如果文件存在,mongo会将一个从1到10的整数附加到时间值,以尝试创建唯一文件。
environment
EDITOR指定与
editshell命令一起使用的编辑器的路径。 JavaScript变量EDITOR将覆盖EDITOR的值。
HOME指定主目录的路径,
mongo将从该主目录读取.mongorc.js文件并写入.dbshell文件。
HOMEPATH指定主目录的 Windows 路径,
mongo将在该主目录中读取.mongorc.js文件并写入.dbshell文件。
键盘快捷键
键绑定 | function |
|---|---|
向上箭头 | 从历史记录中检索上一个命令 |
向下箭头 | 从历史记录中检索下一条命令 |
房屋 | Go行首 |
End | Go行尾 |
Tab | 自动完成方法/命令 |
向左箭头 | Go一个字符 |
右箭头 | Go一个字符 |
Ctrl-向左箭头 | Go一个单词 |
Ctrl-右箭头 | Go一个单词 |
元向左箭头 | Go一个单词 |
元右箭头 | Go一个单词 |
Ctrl-A | Go行首 |
Ctrl-B | Go一个字符 |
Ctrl-C | 退出 |
Ctrl-D | 删除字符(或退出 |
Ctrl-E | Go行尾 |
Ctrl-F | Go一个字符 |
Ctrl-G | 中止 |
Ctrl-J | 接受/评估线路 |
Ctrl-K | 终止/删除该行 |
Ctrl-L 或键入 | 清屏 |
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 | 完整,与 Tab 相同 |
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 键绑定的支持。 |
使用
通常,用户会在系统提示符下使用shell mongo命令来调用 。请考虑以下其他场景的示例。
mongod连接到具有访问控制的 实例
要使用身份验证和非标准端口连接到远程托管上的数据库,请使用以下形式:
mongo --username <user> --password --host <host> --port 28015
或者,考虑以下简短形式:
mongo -u <user> -p --host <host> --port 28015
将<user>和<host>替换为适合您情况的值,并根据需要替换或省略--port 。
如果没有为--password或-p命令行选项指定密码, mongo shell会提示输入密码。
使用 DNS 种子列表连接格式连接到副本集
版本 3.6 中的新增功能。
要连接到使用 SRV 连接格式 描述的副本集,请使用 选项指定--host 的连接string mongoshell。在以下示例中,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记录包括replicaSet和authSource选项:
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 选项中指定的用户的密码。
使用 AWS IAM 档案连接到 MongoDB Atlas 集群
4.4 版本新增。
要连接到已配置为支持通过Amazon Web Services IAM凭证进行身份验证的MongoDB Atlas 群集,请为 mongoShell提供类似于以下内容的连接字符串:
mongo 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'
AtlasAmazon Web Services以这种方式使用 IAM凭证连接到 会使用MONGODB-AWSauthentication mechanism 和$externalauthSource ,如本示例所示。
如果还使用 Amazon Web Services会话令牌 ,请在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>'
注意
或者,可以使用 、 --username--password和 Amazon Web ServicesID选项在连接string--awsIamSessionToken 外部提供 访问密钥 和秘密访问密钥以及可选的会话令牌,如下所示:
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>
当作为命令行参数提供时,这三个选项无需进行百分号编码。
您还可以使用标准Amazon Web Services IAM 环境变量在您的平台上设立这些凭证。当您使用mongo 时, Shell会检查以下环境变量:MONGODB-AWSauthentication mechanism
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN
如果设置,则无需在连接string中或通过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'
针对mongo Shell执行JavaScriptJavaScriptshell
要在启动JavaScript ~/.mongorc.js会话之前执行 文件而不评估shell 文件,请使用以下形式:
mongo --shell --norc alternate-environment.js
要使用身份验证执行JavaScript文件,并提示密码而不是在命令行上提供密码,请使用以下形式:
mongo script-file.js -u <user> -p
使用--eval 执行JavaScript代码
您可以使用--eval选项直接命令行执行JavaScript 。
示例,以下操作会计算用于查询集合的JavaScript string并将结果打印为JSON 。
在 Linux 和 macOS 上,您需要使用单引号(例如 ' )将 JavaScript 括起来,使用以下形式:
mongo --eval 'db.collection.find().forEach(printjson)'
在Windows上,您需要使用double引号(例如 " )将JavaScript括起来,使用以下形式:
mongo --eval "db.collection.find().forEach(printjson)"