连接字符串URI格式

    在本页面

    本文档介绍了URI格式,用于在官方MongoDB drivers.定义应用程序和MongoDB实例之间的连接 。有关驱动程序的列表和驱动程序文档的链接,请参见drivers

    连接字符串格式

    你可以指定MongoDB连接字符串使用任何:

    本节描述用于连接到MongoDB部署的MongoDB连接URI的标准格式:独立、复制集或分片集群。

    标准的URI连接方案有如下形式:

    1. mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

    例子

    • 单机版

      1.对于独立版本

    1. mongodb://mongodb0.example.com:27017

    ​ 2. 对于一个强制访问控制:

    1. mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017/?authSource=admin
    • 复制集

    注意

    对于一个复制集,指定副本集配置中列出的mongod实例的主机名。

    对于复制集,包括replicaSet 选项。

    ​ 1.对于一个复制集:

    1. mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl

    ​ 2.对于强制访问控制的复制集,包括用户凭证:

    1. mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
    • 分片集群

    注意

    对于分片集群的连接字符串,在连接字符串中指定mongos主机。

    ​ 1.对于分片集群:

    1. mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017

    ​ 2.对于实施访问控制的分片集群,包括用户凭证:

    1. mongodb://myDBReader:D1fficultP%40ssw0rd@mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

    如果用户名或密码包含at符号@,冒号:,斜杠/或百分号%字符,请使用百分比编码

    更多示例,请参见examples

    组件

    标准的URI连接字符串包括以下组件:

    组件 描述
    mongodb:// 标识这是标准连接格式的字符串的必需前缀。
    username:password@ 可选的。身份验证凭据。
    如果指定,则客户端将尝试向验证用户authSource。如果 authSource未指定,则客户端将尝试向验证用户defaultauthdb。如果defaultauthdb未指定,则发送到admin 数据库。
    如果用户名或密码包含at符号@,冒号:,斜杠/或百分号%字符,请使用百分比编码
    另请参阅authSource
    host[:port] mongod实例(或分片mongos 群集的实例)运行所在的主机(和可选的端口号) 。您可以指定主机名,IP地址或UNIX域套接字。根据您的部署拓扑指定尽可能多的主机:
    对于独立mongod实例,请指定独立实例的主机名 。
    对于复制集,请指定mongod 复制集配置中列出的实例的主机名。
    对于分片群集,请指定mongos实例的主机名 。
    如果未指定端口号,27017 则使用默认端口。
    /defaultauthdb 可选的。如果连接字符串包含username:password@ 身份验证凭据但未authSource指定选项,则使用的身份验证数据库。
    如果两个authSourcedefaultauthdb未指定,客户端将尝试以指定用户的身份验证admin数据库。
    ?<options> 可选的。查询字符串,将连接特定的选项指定为<name>=<value>对。有关这些选项的完整说明,请参见 连接字符串选项
    如果连接字符串没有指定数据库/您必须在最后一台主机和开始选项字符串的问号之间指定一个斜杠(/)。

    DNS Seedlist 连接格式

    新增3.6版

    除了标准的连接格式,MongoDB还支持一个DNS构造的Seedlist列表。使用DNS构造可用服务器列表允许更灵活的部署,并允许在不重新配置客户机的情况下轮流更改服务器。

    为了利用DNSSeedlist列表,使用一个连接字符串前缀 mongodb+srv:,而不是标准的 mongodb:+srv向客户端表明后面的主机名对应于一个DNS srv记录。驱动程序或mongoshell将查询DNS记录,以确定哪些主机正在运行mongod实例。

    注意

    使用 +srv 连接字符串修饰符自动将该连接的tls(或等效的ssl)选项设置为true。您可以通过将查询字符串中的tls (或等效ssl)选项显式设置为false通过 tls=false(或ssl=false)来覆盖此行为。

    下面的例子显示了一个典型的DNS seedlist连接字符串的连接字符串:

    1. mongodb+srv://server.example.com/

    对应的DNS配置如下:

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

    重要

    SRV记录中返回的主机名必须与给定的主机名共享相同的父域(在本例中为example.com)。如果父域名和主机名不匹配,您将无法连接。

    与标准连接字符串一样,DNS seedlist连接字符串支持将选项指定为查询字符串。使用DNSseedlist列表连接字符串,您还可以通过TXT记录指定以下选项:

    • replicaSet
    • authSource

    您只能为每个mongod实例指定一个TXT记录。如果多个TXT记录出现在DNS/或如果TXT记录包含一个选项,而不是replicaSetauthSource,客户端将返回一个错误。

    TXT记录server.example.comDN条目类似于:

    1. 记录 TTL Class Text
    2. server.example.com. 86400 IN TXT replicaSet = mySetauthSource = authDB

    综合起来,DNS SRV记录和TXT记录中指定的选项解析为以下标准格式的连接字符串:

    1. mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB

    您可以通过在查询字符串中传递选项来重写TXT记录中指定的选项。在下面的示例中,查询字符串为TXT中配置的authSource选项提供了重写记录上面的DNS条目。

    1. mongodb + srv//server.example.com/?connectTimeoutMS = 300000&authSource = aDifferentAuthDB

    给定authSource的重写,标准格式的等效连接字符串为:

    1. mongodb//mongodb1.example.com:27317,mongodb2.example.com:27017 /?connectTimeoutMS = 300000&replicaSet = mySet&authSource = aDifferentAuthDB

    注意

    如果没有与连接字符串中标识的主机名对应的可用DNS记录,mongodb+srv选项将失败。此外,使用+srv连接字符串修饰符会自动为连接设置tls(或等效 ssl)选项true。您可以通过将查询字符串中的tls (或等效ssl)选项显式设置为false通过 tls=false(或ssl=false)来覆盖此行为。

    请看:

    使用DNSSeedlist列表连接格式连接到复制集提供一个使用DNSseedlist列表连接格式连接mongo shell到复制集的示例。

    连接字符串选项

    本节列出了所有连接选项。

    连接选项是成对的,格式如下:name=value

    • name使用驱动程序时,该选项不区分大小写。
    • name使用4.2+版本的mongoShell 时,该选项不区分大小写 。
    • name使用4.0版或更早版本的mongoShell 时,此选项区分大小写。
    • value始终是区分大小写的。

    &字符分隔选项(即:&)name1=value1&name2=value2。在以下示例中,连接包括replicaSetconnectTimeoutMS选项:

    1. mongodb//db1.example.net:27017,db2.example.net:2500 /?replicaSet = test&connectTimeoutMS = 300000

    用于连接字符串参数的分号分隔符:

    为了提供向后兼容性,驱动程序目前接受分号(即;)作为选项分隔符。

    复制集选项

    以下连接字符串到一个名为myRepl的复制集,成员运行在指定的主机上:

    1. mongodb//db0.example.com:27017,db1.example.com:27017,db2.example.com:27017 /?replicaSet = myRepl
    连接选项 描述
    replicaSet 如果mongod是复制集的成员,则指定复制集的名称。
    当连接到复制集时,向urihost[:port]组件提供复制集成员的seed列表。有关具体细节,请参考您的驱动程序文档。

    连接选项

    TLS选项

    下面的连接字符串到一个复制集包括 tls=true选项(在MongoDB 4.2可用):

    1. mongodb//db0.example.com,db1.example.com,db2.example.com/?replicaSet = myRepl&tls = true

    或者,你也可以使用等价的ssl=true选项:

    1. mongodb//db0.example.com,db1.example.com,db2.example.com/?replicaSet = myRepl&ssl = true
    连接选项 描述
    tls 为连接启用或禁用TLS / SSL:
    true:使用TLS / SSL启动连接。DNSseedlist列表连接格式的默认设置 。
    false:在没有TLS / SSL的情况下启动连接。标准连接字符串格式的默认设置 。
    注意
    tls选项等效于该 ssl选项。
    如果mongo shell从命令行指定了额外的tls / ssl选项,则使用--tls命令行选项。
    4.2版中的新功能。
    ssl 用于连接启用或禁用TLS / SSL的布尔值:
    true:使用TLS / SSL启动连接。DNSseedlist列表连接格式的默认设置 。
    false:在没有TLS / SSL的情况下启动连接。标准连接字符串格式的默认设置。
    注意
    ssl选项等效于该 tls选项。
    如果mongo shell从命令行指定了额外的tls / ssl选项,则使用--tls命令行选项。
    tlsCertificateKeyFile 指定.pem包含客户端的TLS / SSL X.509证书或客户端的TLS / SSL证书和密钥的本地文件的位置。
    客户端将此文件呈现给 mongod/ mongos实例。
    4.4版本改变:mongod / mongos记录连接上的警告如果给出x.509证书在mongod/mongos主机系统时间的30天内到期。有关更多信息,请参见 x.509证书即将过期触发警告
    并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
    此连接字符串选项不适用于mongo shell。请改用命令行选项。
    4.2版中的新功能。
    tlsCertificateKeyFilePassword 指定用于反加密tlsCertificateKeyFile的密码。
    并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
    此连接字符串选项不适用于mongo shell。请改用命令行选项。
    4.2版中的新功能。
    tlsCAFile 指定.pem包含来自证书颁发机构的根证书链的本地文件的位置。此文件用于验证mongod/ mongos 实例提供的证书。
    并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
    此连接字符串选项不适用于mongo shell。请改用命令行选项。
    4.2版中的新功能。
    tlsAllowInvalidCertificates 绕过mongod/ mongos实例提供的证书的验证
    设置为true连接到MongoDB实例,即使服务器当前存在无效证书。
    并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
    此连接字符串选项不适用于mongo shell。请改用命令行选项。
    警告
    禁用证书验证会产生漏洞。
    4.2版中的新功能。
    tlsAllowInvalidHostnames 禁用mongod/ mongos实例提供的证书的主机名验证。
    设置为true连接到MongoDB实例,即使服务器证书中的主机名与服务器的主机不匹配。
    并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
    此连接字符串选项不适用于mongo shell。请改用命令行选项。
    警告
    禁用证书验证会产生漏洞。
    4.2版中的新功能。
    tlsInsecure 禁用各种证书验证。
    设置为true禁用证书验证。禁用的确切验证因驱动程序而异。请参阅 驱动程序文档。
    此连接字符串选项不适用于mongo shell。请改用命令行选项。
    警告
    禁用证书验证会产生漏洞。
    4.2版中的新功能。

    超时选项

    连接选项 描述
    connectTimeoutMS 超时之前尝试连接的时间(以毫秒为单位)。默认值是永不超时,尽管不同的驱动程序可能有所不同。请参阅驱动程序 文档。
    socketTimeoutMS 尝试超时之前在套接字上尝试发送或接收的时间(以毫秒为单位)。默认值是永不超时,尽管不同的驱动程序可能有所不同。请参阅 驱动程序文档。

    压缩选项

    连接选项 描述
    compressors 由逗号分隔的压缩器字符串,用于在此客户端和mongod/ mongos实例之间进行通信时启用网络压缩。
    您可以指定以下压缩器:
    snappy
    zlib(在MongoDB 3.6或更高版本中可用)
    zstd(在MongoDB 4.2或更高版本中可用)
    如果指定多个压缩器,那么列出压缩器的顺序和通信启动器的顺序都很重要。例如,如果客户端指定了以下网络压缩器“zlib,snappy”,而mongod指定了“snappy,zlib”,那么客户端和mongod之间的消息就使用zlib
    重要
    当双方都启用网络压缩时,消息将被压缩。否则,各方之间的消息将不被压缩。
    如果各方不共享一个公共压缩器,则各方之间的消息将不被压缩。
    从MongoDB 4.0.5(和MongoDB 3.6.10)开始, mongo shell支持uri连接字符串选项compressors
    zlibCompressionLevel 如果使用zlib进行网络压缩,则指定压缩级别的整数。
    您可以指定一个从-19的整数值::
    值 笔记
    -1 默认压缩级别,通常是6级压缩。
    0 无压缩
    19 增加压缩级别但以速度为代价,具有:
    1 提供最佳速度,但压缩最少,
    9 提供最佳压缩效果,但速度最慢。
    不被mongo shell支持。

    连接池选项

    大多数驱动程序实现某种类型的连接池处理。有些驱动程序不支持连接池。有关连接池实现的更多信息,请参见驱动程序文档。这些选项允许应用程序在连接到MongoDB部署时配置连接池。

    连接选项 描述
    maxPoolSize 连接池中的最大连接数。默认值为100
    minPoolSize 连接池中的最小连接数。默认值为0
    注意
    并不是所有驱动程序都支持minPoolSize选项。有关驱动程序的信息,请参阅 驱动程序文档。
    maxIdleTimeMS 在删除和关闭连接之前,连接在池中可以保持空闲状态的最大毫秒数。
    并非所有驱动程序都支持此选项。
    waitQueueMultiple 驱动程序将maxPoolSize 值乘以一个数字,以提供允许等待池中的连接可用的最大线程数。有关默认值,请参见/ drivers 文档。
    并非所有驱动程序都支持此选项。
    waitQueueTimeoutMS 线程可以等待连接可用的最长时间(以毫秒为单位)。有关默认值,请参见 / drivers文档。
    并非所有驱动程序都支持此选项。

    写关注选项

    写关注描述了MongoDB请求的确认级别。下列情况支持写关注选项:

    您可以在连接字符串中指定写关注,也可以将其指定为诸如insertupdate等方法的参数。如果在两个地方都指定了写关注点,则method参数将覆盖连接字符串设置。

    下面的连接字符串到一个复制集指定 "majority"写关注和5秒超时使用wtimeoutMS写关注参数:

    1. mongodb//db0.example.com,db1.example.com,db2.example.com/?replicaSet = myRepl&w = majority&wtimeoutMS = 5000
    连接选项 描述
    w 对应于写关注w Option。该w选项请求确认写操作已传播到指定数量的mongod实例或 mongod具有指定标签的实例。
    您可以指定number,字符串majoritytag set
    有关详细信息,请参见w Option
    wtimeoutMS 对应于写关注点wtimeout. wtimeoutMS为写关注指定了一个时间限制,以毫秒为单位。
    如果wtimeoutMS0,写操作永远不会超时。有关更多信息,请参见wtimeout
    journal 对应于写关注点j Option选项。该 journal选项要求MongoDB确认已将写操作写入 日志。有关详细信息,请参见j选项
    如果设置journaltrue,并指定w小于1 的 值,则journal优先。
    如果您将journal设置为true,并且 mongod未启用日志功能(如) storage.journal.enabled,则MongoDB将出错。

    有关更多信息,请参见写关注点

    readConcern选项

    版本3.2中的新特性:对于WiredTiger存储引擎,MongoDB 3.2为复制集和复制集分片引入了readConcern选项。

    Read Concern允许客户端为从复制集读取选择隔离级别。

    下面的复制集连接字符串指定 readConcernLevel=majority

    1. mongodb//db0.example.com,db1.example.com,db2.example.com/?replicaSet = myRepl&readConcernLevel = majority
    连接选项 描述
    readConcernLevel 隔离的程度。可以接受下列值之一:
    local
    majority
    linearizable
    available
    此连接字符串选项不适用于 mongoshell。指定read关注点作为特定操作的选项

    有关更多信息,请参见读关注

    阅读首选项选项

    读取首选项描述了与复制集相关的读取操作的行为。这些参数允许您在连接字符串中以每个连接为基础指定读取首选项。

    注意

    要使用驱动程序指定已对冲的读取选项,请参考 驱动程序的读取首选项API

    例如:

    • 以下到复制集的连接字符串指定 secondary读取首选项模式和maxStalenessSeconds120秒的值:

      1. mongodb//db0.example.com,db1.example.com,db2.example.com/?replicaSet = myRepl&readPreference = secondary&maxStalenessSeconds = 120
    • 以下到分片群集的连接字符串指定 secondary读取首选项模式和maxStalenessSeconds120秒的值:

      1. mongodb//mongos1.example.com,mongos2.example.com/?readPreference = secondary&maxStalenessSeconds = 120
    • 以下到分片群集的连接字符串指定 secondary读取首选项模式以及三种 readPreferenceTags

      1. mongodb//mongos1.example.com,mongos2.example.com/?readPreference = secondary&readPreferenceTags = dc:ny,rack:r1&readPreferenceTags = dc:ny&readPreferenceTags =

    使用多个readPreferenceTags时,顺序很重要。按顺序尝试readPreferenceTags,直到找到匹配项为止。一旦找到,该规范将用于查找所有符合条件的匹配成员,并忽略任何剩余的readPreferenceTags。有关详细信息,请参见标签匹配顺序

    连接选项 描述
    readPreference 指定此连接的读取首选项。可能的值为:
    primary默认
    primaryPreferred
    secondary
    secondaryPreferred
    nearest
    包含读取操作的多文档事务必须使用读取首选项primary。给定事务中的所有操作必须路由到同一成员。
    此连接字符串选项不适用于 mongoshell。
    请参阅cursor.readPref()Mongo.setReadPref()
    maxStalenessSeconds 指定以秒为单位的秒数,表示客户机在停止将其用于读取操作之前会过时。有关详细信息,请参见 阅读首选项maxStalenessSeconds
    默认情况下,没有最大的过时度,客户机在选择将读操作指向何处时不会考虑辅助服务器的延迟。
    最小值maxStalenessSeconds为90秒。指定0到90秒之间的值将产生错误。MongoDB驱动程序将maxStalenessSeconds-1视为“没有最大过时性”,就好像maxStalenessSeconds被忽略了一样 。
    重要
    要使用maxStalenessSeconds,部署中的所有MongoDB实例都必须使用MongoDB 3.4或更高版本。如果任何实例在MongoDB的早期版本上,则驱动程序或mongod/ mongos将引发错误。
    3.4版的新功能。
    readPreferenceTags 标签文档指定为以冒号分隔的键/值对的列表,以逗号分隔。例如,
    要指定标签文档{"dc": "ny", "rack": "r1"},在连接字符串中使用readPreferenceTags=dc:ny,rack:r1。
    若要指定空标记文档{},请使用readPreferenceTags=而不设置值。
    要指定标签文档列表,请使用多个readPreferenceTags。例如,readPreferenceTags=dc:ny,rack:r1&readPreferenceTags=.
    使用多个readPreferenceTags时,顺序很重要。按顺序尝试readPreferenceTags,直到找到匹配项为止。有关详细信息,请参见标记匹配的顺序
    这个连接字符串选项对mongo shell不可用。请参阅cursor.readPref()Mongo.setReadPref()

    有关更多信息,请参阅阅读首选项

    验证选项

    下面到复制集的连接字符串指定admin数据库的 authSource。也就是说,根据admin数据库对用户凭据进行身份验证。

    1. mongodb// myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017 /?replicaSet = myRepl &authSource = admin

    如果用户名或密码包含’at’符号@,冒号:,斜杠/或百分号%字符,请使用百分比编码

    连接选项 描述
    authSource 指定与用户凭据关联的数据库名称。如果authSource未指定,则 authSource默认为defaultauthdb 连接字符串中指定的。如果defaultauthdb未指定,则authSource默认为admin
    普通身份验证机制(LDAP)、GSSAPI(Kerberos)和MONGODB-AWS (IAM)要求将authSource设置为$external,因为这些机制将凭据存储委托给外部服务。
    如果在连接字符串中或通过—username参数中没有提供用户名,MongoDB将忽略authSource值。
    authMechanism 指定MongoDB将用于认证连接的认证机制。可能的值包括:
    SCRAM-SHA-1
    SCRAM-SHA-256MongoDB 4.0中添加
    MONGODB-X509
    MONGODB-AWS在MongoDB 4.4中添加了
    GSSAPI(Kerberos)
    普通(LDAP SASL)
    MongoDB 4.0删除了对MONGODB-CR 身份验证机制的支持。MONGODB-CR连接到MongoDB 4.0+部署时,不能指定为身份验证机制。
    仅MongoDB Enterprise mongodmongos实例提供GSSAPI(Kerberos)和 PLAIN(LDAP)机制。
    要使用MONGODB-X509,您必须启用TLS / SSL。
    要使用MONGODB-AWS,您必须连接到已配置为支持通过AWS IAM凭证 (即AWS访问密钥ID和秘密访问密钥,以及可选的AWS会话令牌)进行身份验证的 MongoDB Atlas集群 。该认证机制需要 设置为。MONGODB-AWSauthSource$external使用时MONGODB-AWS,请提供您的AWS访问密钥ID作为用户名,并提供秘密访问密钥作为密码。如果还使用 AWS会话令牌 ,请为其提供AWS_SESSION_TOKEN authMechanismProperties值。
    如果AWS访问密钥ID,秘密访问密钥或会话令牌包含’at’符号@,冒号:,斜杠 /或百分号%字符,则必须使用百分比编码转换这些字符。
    或者,如果您使用各自的AWS IAM环境变量 在平台上定义了AWS访问密钥ID,秘密访问密钥或会话令牌,则 mongoShell将使用这些环境变量值进行身份验证;您无需在连接字符串中指定它们。有关同时使用连接字符串和环境变量方法的身份验证机制的用法,请参阅连接到Atlas群集MONGODB-AWS。有关MongoDB中身份验证系统的更多信息,请参阅身份验证。另请考虑 使用x.509证书对客户端进行身份验证,以获取有关x509身份验证的更多信息。
    authMechanismProperties 将指定的属性指定authMechanism 为以逗号分隔的冒号分隔的键/值对列表。可能的键值对为:SERVICE_NAME:<string>连接到Kerberized MongoDB实例时,设置Kerberos服务名称。该值必须与您要连接的MongoDB实例上设置的服务名称匹配。仅在使用GSSAPI 身份验证机制时有效。SERVICE_NAME``mongodb所有客户端和MongoDB实例默认为。如果更改saslServiceNameMongoDB实例上的 设置,则必须进行设置SERVICE_NAME以匹配该设置。仅在使用GSSAPI 身份验证机制时有效。`CANONICALIZE_HOST_NAME:true false连接到Kerberos服务器时,规范化客户端主机的主机名。当主机报告的主机名与Kerberos数据库中的主机名不同时,可能需要这样做。默认为false。仅在使用[GSSAPI](https://docs.mongodb.com/master/core/authentication-mechanisms-enterprise/security-auth-kerberos)身份验证机制时有效 。SERVICE_REALM:为MongoDB服务设置Kerberos领域。这对于支持跨域身份验证可能是必需的,在该跨域身份验证中,用户位于一个领域中,而服务位于另一个领域中。仅在使用[GSSAPI](https://docs.mongodb.com/master/core/authentication-mechanisms-enterprise/security-auth-kerberos)身份验证机制时有效。AWS_SESSION_TOKEN:在使用[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 请求或使用指定该值的AWS资源(例如Lambda)时,设置AWS会话令牌以使用临时凭证进行身份验证。仅在使用MONGODB-AWS` 身份验证机制时有效。您还必须具有一个AWS访问密钥ID和一个秘密访问密钥。有关示例用法,请参见 连接到Atlas群集
    gssapiServiceName 连接到Kerberized MongoDB实例时,设置Kerberos服务名称。该值必须与您要连接的MongoDB实例上设置的服务名称匹配。gssapiServiceNamemongodb所有客户端和MongoDB实例默认为。如果更改 saslServiceNameMongoDB实例上的设置,则必须进行设置gssapiServiceName以匹配该设置。gssapiServiceName是不推荐使用的别名 authMechanismProperties=SERVICE_NAME:mongodb。有关驱动程序支持哪些选项以及它们之间的相对优先级的更多信息,请参考首选驱动程序版本的文档。

    服务器选择和查找选项

    MongoDB提供以下选项来配置MongoDB驱动程序和mongos实例如何选择要将读取或写入操作定向到的服务器。

    连接选项 描述
    localThresholdMS 在多个合适的MongoDB实例中进行选择的等待时间窗口的大小(以毫秒为单位)。默认值:15毫秒。所有驱动程序都使用localThresholdMSlocalThreshold将延迟窗口大小指定为时,请使用 别名mongos
    serverSelectionTimeoutMS 指定在引发异常之前为选择服务器而阻塞的时间(以毫秒为单位)。默认值:30,000毫秒。
    serverSelectionTryOnce 仅单线程驱动程序。如果为true,则指示驱动程序在服务器选择失败后立即扫描MongoDB部署一次,然后选择服务器或引发错误。当为时false,驱动程序将阻止并搜索不超过该serverSelectionTimeoutMS值的服务器。 默认值true。并且mongos不支持 多线程驱动程序serverSelectionTryOnce
    heartbeatFrequencyMS heartbeatFrequencyMS控制驱动程序何时检查MongoDB部署的状态。指定两次检查之间的间隔(以毫秒为单位),从上一次检查的结束到下一次检查的开始计算。默认值:单线程驱动程序:60秒。多线程驱动程序:10秒。mongos 不支持更改心跳检查的频率。

    杂项配置

    连接选项 描述
    appName 指定自定义应用名称。应用名称出现在mongod日志mongos命令和方法输出中的currentOp.appName字段,currentOpdb.currentOp()数据库探查器输出中的system.profile.appName字段。如果您未指定自定义应用程序名称,则mongo 外壳程序将使用默认的“ ”。MongoDB Shell版本4.0中的新功能。
    retryReads 启用可重试的读取。可能的值为:true。启用连接的可重试读取。与MongoDB Server 4.2及更高版本兼容的官方MongoDB驱动程序默认为truefalse。禁用连接的可重试读取。在mongo外壳不支持重试读取。4.2版中的新功能。
    retryWrites 启用可重试写入。可能的值为:true。启用连接的可重试写入。兼容MongoDB 4.2的官方驱动程序默认为truefalse。禁用该连接的可重试写入。官方的MongoDB 4.0和3.6兼容驱动程序默认为false。MongoDB驱动程序将重试 事务提交和中止操作, 而与的值无关retryWrites。有关事务可重试性的更多信息,请参见 事务错误处理3.6版的新功能。
    uuidRepresentation 可能的值为:standard标准二进制表示形式。csharpLegacyC#驱动程序的默认表示。javaLegacyJava驱动程序的默认表示形式。pythonLegacyPython驱动程序的默认表示形式。对于默认设置,请参阅驱动程序的驱动程序 文档。注意并非所有驱动程序都支持该uuidRepresentation 选项。有关驱动程序的信息,请参阅驱动程序文档。

    例子

    以下提供了用于公共连接目标的示例URI字符串。

    在本地运行的数据库服务器

    以下连接到在默认端口上本地运行的数据库服务器:

    1. mongodb//本地主机

    admin数据库

    以下内容admin以用户身份sysop使用密码连接并登录到数据库 moon

    1. mongodb// sysop:moon @ localhost

    records数据库

    以下内容records以用户身份sysop使用密码连接并登录到数据库 moon

    1. mongodb// sysop:moon @ localhost / records

    UNIX域套接字

    连接到UNIX域套接字时,请使用URL编码的连接字符串。

    以下连接到具有文件路径的UNIX域套接字 /tmp/mongodb-27017.sock

    1. mongodb//%2Ftmp%2Fmongodb-27017.sock

    注意

    并非所有驱动程序都支持UNIX域套接字。有关驱动程序的信息,请参阅驱动程序 文档。

    在不同计算机上具有成员的副本集

    以下内容连接到具有两个成员的副本集,一个成员db1.example.net在另一个成员 上db2.example.net

    注意

    对于副本集,请指定mongod 副本集配置中列出的实例的主机名。

    1. mongodb//db1.example.net,db2.example.com/?replicaSet = test

    带有成员的副本集localhost

    下面连接到副本集具有三个成员上运行localhost的端口2701727018以及27019

    注意

    对于副本集,请指定mongod 副本集配置中列出的实例的主机名。

    1. mongodb//本地主机,本地主机:27018,本地主机:27019 /?replicaSet = test

    具有读取分布的副本集

    以下内容连接到具有三个成员的副本集,并将读取内容分发给第二副本:

    注意

    对于副本集,请指定mongod 副本集配置中列出的实例的主机名。

    1. mongodb//example1.com,example2.com,example3.com/?replicaSet = test&readPreference = secondary

    具有写关注级别的副本集

    以下内容连接到具有写关注点的副本集,该副本集被配置为等待跨大多数数据承载投票成员的复制成功,并具有两秒的超时。

    注意

    对于副本集,请指定mongod 副本集配置中列出的实例的主机名。

    1. mongodb//example1.com,example2.com,example3.com/?replicaSet = test&w = majority&wtimeoutMS = 2000

    分片群集

    以下连接到具有三个mongos实例的分片群集:

    1. mongodb//router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017 /

    MongoDB Atlas集群

    版本4.4中的新功能。

    以下连接到已配置为支持通过AWS IAM凭证进行身份验证的MongoDB Atlas集群:

    1. mongo'mongodb + srv:// <aws访问密钥ID>:<aws秘密访问密钥> @ cluster0.example.com / testdb?authSource = $ external&authMechanism = MONGODB-AWS'

    如本示例所示,以这种方式使用AWS IAM凭据连接到Atlas使用 和和。MONGODB-AWS [`$external authSource

    如果还使用AWS会话令牌,请为其提供AWS_SESSION_TOKEN authMechanismProperties值,如下所示:

    1. mongo'mongodb + srv:// <aws访问密钥ID>:<aws秘密访问密钥> @ cluster0.example.com / testdb?authSource = $ external&authMechanism = MONGODB-AWS&authMechanismProperties = AWS_SESSION_TOKEN:<aws会话令牌>'

    如果AWS访问密钥ID,秘密访问密钥或会话令牌包括’at’符号@,冒号:,斜杠/或百分号%字符,则必须使用百分比编码转换这些字符 。

    您也可以使用标准AWS IAM环境变量在平台上设置这些凭证 。使用mongo以下命令时,shell将检查以下环境变量:MONGODB-AWS authentication mechanism

    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_SESSION_TOKEN

    如果设置,则无需在连接字符串中指定这些凭据。

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

    1. 导出AWS_ACCESS_KEY_ID ='<aws访问密钥ID>'
    2. 导出AWS_SECRET_ACCESS_KEY ='<aws秘密访问密钥>'
    3. 导出AWS_SESSION_TOKEN ='<aws会话令牌>'

    在其他shell中设置环境变量的语法将有所不同。有关更多信息,请查阅您平台的文档。

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

    1. env | grep AWS

    设置完成后,以下示例将使用以下环境变量连接到MongoDB Atlas集群:

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

    参见

    原文 - Connection String URI Format