指定连接选项
本部分介绍 Node.js驾驶员支持的MongoDB连接和身份验证选项,您可以在 MongoClientOptions
实例中设立这些选项。
有关直接在连接字符串中设置连接选项的更多信息,请参阅MongoDB Server手册中的 连接字符串。
名称 | 接受的值 | 默认值 | 说明 |
---|---|---|---|
appName | 字符串 |
| 指定驱动程序在连接握手过程中传递到客户端元数据中的服务器的应用名称。当建立此连接时,驱动程序会向 MongoDB 发送 |
authMechanism | 字符串 |
| 指定用于连接到服务器的身份验证机制方法。如果不指定值,驾驶员将使用默认机制,即 |
authMechanismProperties | 逗号分隔的键值对,例如 "opt1:val1,opt2:val2" |
| 指定为身份验证提供的其他选项,例如为 GSSAPI 启用主机名规范化。 |
authSource | 字符串 |
| 指定连接要对其进行身份验证的数据库。 |
autoSelectFamily | 布尔 |
| 如果设立为 |
autoSelectFamilyAttemptTimeout | non-negative integer |
| 指定使用 |
compressors | 逗号分隔的字符串列表,例如 "snappy,zlib,zstd" |
| 指定发送到服务器或从服务器接收的传输协议消息的允许压缩类型。请参阅网络压缩,获取更多信息。 |
connectTimeoutMS | non-negative integer |
| 指定在引发错误之前等待与服务器建立单个 TCP 套接字连接的时间(以毫秒为单位)。指定 |
directConnection | 布尔 |
| 指定是否强制将所有操作分派到连接 URI 中指定的主机。 |
enableUtf8Validation | 布尔 |
| 指定 指定 要学习;了解有关 UTF-8 字符的更多信息,请参阅维基百科上的 UTF-8。 |
heartbeatFrequencyMS | 大于或等于 500 的整数。 |
| 指定服务器定期监控检查的间隔时间(以毫秒为单位)。 |
loadBalanced | 布尔 |
| 指定驱动程序是否连接到负载均衡器。 |
localThresholdMS | non-negative integer |
| 指定用来在合适的服务器之间进行选择的往返时间的延迟窗口大小(以毫秒为单位)。指定 |
maxIdleTimeMS | non-negative integer |
| 指定连接在关闭之前可以处于空闲状态的时间(以毫秒为单位)。指定 |
maxPoolSize | non-negative integer |
| 指定驱动程序可在连接池中创建的客户端或连接的最大数量。此数量包括正在使用的连接。 |
maxConnecting | non-negative integer |
| 指定驱动程序的连接池可以同时建立的最大连接数。 |
maxStalenessSeconds | -1,或大于或等于 90 的整数 |
| 指定从节点可能遇到但仍有资格供服务器选择的最大复制延迟(以挂钟时间为单位)。指定 |
minPoolSize | non-negative integer |
| 指定驱动程序在连接池中创建并维持的连接数。即使没有发生任何操作,连接池中也要保持这一连接数。此数量包括正在使用的连接。 |
proxyHost | 字符串 |
| 指定 SOCKS5 代理的 IPv4 地址、IPv6 地址或域名。 |
代理端口 | non-negative integer |
| 指定 SOCKS5 代理服务器的 TCP 端口号。如果设置了 |
proxyUsername | 字符串 |
| 指定用于向 SOCKS5 代理服务器进行身份验证的用户名。如果将此选项设置为零长度的字符串,驱动程序将忽略它。 |
proxyPassword | 字符串 |
| 指定用于向 SOCKS5 代理服务器进行身份验证的密码。如果将此选项设置为零长度的字符串,驱动程序将忽略它。 |
readConcernLevel | 字符串 |
| 指定客户端的默认读关注。有关更多信息,请参阅读关注。 |
readPreference | 字符串 |
| 指定客户端的默认读取偏好(不包括标签)。有关更多信息,请参见读取偏好。 |
readPreferenceTags | 逗号分隔的键:值对,例如 "dc:ny,rack:1",而且 "dc:ny" 可以指定多次,该键的每个实例都是一个单独的标签集 |
| 指定客户端的默认读取偏好标签。仅当读取偏好不是主节点("primary")模式时,此选项才有效。 驱动程序将 URI 中标签的顺序用作读取偏好的顺序。 |
replicaSet | 字符串 |
| 指定要连接到的副本集的名称。 |
retryReads | 布尔 |
| 允许重试读取。 |
retryWrites | 布尔 |
| 启用可重试写入。 |
serverMonitoringMode |
|
| 指定驱动程序监控器使用的监控模式。当此选项设置为 |
serverSelectionTimeoutMS | non-negative integer |
| 指定在抛出错误之前,为服务器选择阻塞的超时时间(以毫秒为单位)。 |
socketTimeoutMS | non-negative integer |
| 指定超时之前尝试在套接字上发送或接收所花费的时间(以毫秒为单位)。指定 |
SrvMaxHosts | non-negative integer |
| 指定最初填充种子列表,或在 SRV 轮询期间向拓扑结构中添加新主机时,随机选择的 SRV 结果的最大数量。 |
srvServiceName | 符合 RFC 6335 的有效 SRV 服务名称 |
| 指定在初始 DNS 种子列表发现中用于 SRV 查找的服务名称。 |
ssl | 布尔 |
|
|
TLS | 布尔 |
| 指定与服务器的连接是否需要 TLS。使用 |
tlsAllowInvalidCertificates | 布尔 |
| 指定当服务器的 TLS 证书无效时,驱动程序是否产生一个错误。将此选项设置为 |
tlsAllowInvalidHostnames | 布尔 |
| 指定当服务器主机名与 TLS 证书指定的主机名匹配时,驱动程序是否会生成错误。将此选项设为 |
tlsCAFile | 字符串 |
| 指定一个文件的路径,此文件中包含建立 TLS 连接时要信任的单个或一组证书颁发机构。要了解有关如何设置此连接选项的更多信息,请参阅 TLS 指南的提供证书文件路径部分。 |
tlsCertificateKeyFile | 字符串 |
| 指定客户端证书文件或客户端私钥文件的路径。如果同时需要这两份文件,则必须将它们合并起来。要了解设置此连接选项的更多信息,请参阅 TLS 指南的提供证书文件路径部分。 |
tlsCertificateKeyFilePassword | 字符串 |
| 指定密码,该密码负责解密用于 TLS 连接的客户端私钥。 |
tlsInsecure | 布尔 |
| 指定尽可能放宽 TLS 约束,如允许无效证书或主机名不匹配。将此选项设置为 |
waitQueueTimeoutMS | non-negative integer |
| 指定在被判定超时之前,尝试从服务器的连接池中获取一个连接所允许花费的最长时间(以毫秒为单位)。
|
zlibCompressionLevel | 介于 |
| 指定使用 zlib 压缩传输协议消息时的压缩级别。 |
连接超时选项
设置 | 说明 |
---|---|
connectTimeoutMS |
默认值:30000 |
socketTimeoutMS |
|
maxTimeMS | maxTimeMS 指定服务器等待操作到达服务器后完成的最长时间。如果操作超过指定的时间限制,则会返回超时错误。 只能将 |
如需指定 MongoClient
的可选设置,请在构造函数的 options
对象中声明一个或多个可用设置,如下所示:
const client = new MongoClient(uri, { connectTimeoutMS: <integer value>, socketTimeoutMS: <integer value> });
要查看所有可用设置,请参阅 MongoClientOptions API 文档。
要指定 maxTimeMS
,请将 maxTimeMS
方法作为带有超时规范的选项传递给返回 Cursor
的操作:
const Cursor = collection.distinct('my-key', { maxTimeMS: 50 });
连接后关闭套接字
如果您遇到意外的网络行为,或者MongoDB进程因错误而失败,您可能不会收到驾驶员正确关闭相应套接字的确认信息。
为确保驱动程序在这些情况下正确关闭套接字,请设置 socketTimeoutMS
选项。当 MongoDB 进程超时时,驱动程序将关闭套接字。我们建议您选择的 socketTimeoutMS
的值应比应用程序执行最慢操作的预期持续时间长两到三倍。
防止长时间运行的操作拖慢服务器速度
通过指定超时值,可以防止长时间运行的操作拖慢服务器速度。您可以将 maxTimeMS()
方法链接到返回 Cursor
的操作,为特定操作设置超时。
以下示例展示如何将 maxTimeMS()
方法链接到返回 Cursor
的操作:
// Execute a find command await collection .find({ $where: "sleep(100) || true" }) .maxTimeMS(50);
keepAlive 连接选项
keepAlive
连接选项指定是否在 TCP 套接字上启用传输控制协议 (TCP) keepalive。如果启用了keepalives,驾驶员会定期向MongoDB 部署发送 ping 来检查连接是否处于活动状态。仅当操作系统支持SO_KEEPALIVE
套接字选项时,此功能才有效。
keepAliveInitialDelay
选项指定了驱动程序在启动 keepalive 之前等待的毫秒数。
5.3 驱动程序版本已弃用这些选项。从驱动程序 6.0 版开始,keepAlive
选项永久设置为 true
,keepAliveInitialDelay
设置为 300000 毫秒(300 秒)。
警告
如果您的防火墙忽略或删除了 keepalive 消息,您可能无法识别删除的连接。
更多信息
要学习;了解有关可在MongoClientOptions
实例中设立的连接选项的详情,请参阅API文档中的 MongoClientOptions。