连接选项
Overview
本指南介绍了几个常见的MongoDB连接和身份验证选项。 您可以将连接选项作为参数传递到连接 URI 中,以指定客户端的行为。
选项
下表描述了您可以在连接 URI 中设立的连接选项。 每个条目都提供了选项名称、值类型、默认值和选项说明。
选项名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
timeoutMS | 整型 |
| 指定在返回超时错误之前在 |
connectTimeoutMS | 整型 |
| 指定超时前尝试连接的时间(以毫秒为单位)。 |
maxPoolSize | 整型 |
| 指定连接池在给定时间内的最大连接数。 |
replicaSet | 字符串 |
| 指定集群的副本集名称。副本集中的所有节点必须具有相同的副本集名称,否则客户端不会将其视为副本集的一部分。 |
maxIdleTimeMS | 整型 |
| 指定连接在被删除和关闭之前可以在连接池中保持空闲状态的最长时间。默认值为 |
minPoolSize | 整型 |
| 指定驱动程序在单个连接池中维护的最小连接数。 |
serverSelectionTimeoutMS | 整型 |
| 指定找到一个可用且适合执行操作的服务器所允许等待的毫秒数。 |
heartbeatFrequencyMS | 整型 |
| 指定周期性后台服务器检查之间所需等待的毫秒数。 |
TLS | 布尔 |
| 指定是否与实例建立传输层安全 (TLS) 连接。在连接字符串中使用 DNS 种子列表 (SRV) 时,会自动设置为 |
w | 字符串或整数 |
| 指定写关注(write concern)。 要学习;了解有关值的更多信息,请参阅有关 写关注选项的服务器文档。 |
directConnection | 布尔 |
| 指定是否强制将所有操作分派到连接 URI 中指定的主机。 |
有关连接选项的完整列表,请参阅 ClientOptions API文档。
单一超时设置
您可以在 Client
实例上设立单个 Timeout
选项,以指定执行单个操作所需的最长时间。
通过在为 Client
实例指定选项时调用 SetTimeout()
方法或在连接 URI 中指定 timeoutMS
选项,设置客户端级超时。 默认下,如果您没有为特定操作设立不同的超时时间,则应用应用程序其他位置的所有 Database
、Collection
、Session
、ChangeStream
和 Bucket
实例都会继承 Client
的 Timeout
选项在操作的上下文中。
如果为传递到操作的上下文设立了超时,驾驶员将使用该值进行操作。 如果未指定上下文超时,则操作上下文会从 Client
实例中派生超时。
注意
超时规范下的重试
如果您在 Client
上或在操作级上下文中设立了超时,并且服务器返回了可重试错误,则驾驶员会在超时之前尽可能多次重试该操作。
一旦超时,驾驶员就会返回超时错误。 有关可重试读取和可重试写入的更多信息,请参阅服务器手册。
超时示例
本节提供的示例演示了在应用程序中设立超时的不同方法。
客户端选项
以下代码演示如何使用 SetTimeout()
方法对 Client
设立Timeout
选项:
opts := options.Client().SetTimeout(5 * time.Second) client, err := mongo.Connect(opts)
连接字符串选项
以下示例展示了如何使用 timeoutMS
URI 选项设立单次超时。 然后,代码执行继承超时的插入操作:
uri := "mongodb://user:pass@sample.host:27017/?timeoutMS=5000" client, err := mongo.Connect(options.Client().ApplyURI(uri)) ... coll.InsertOne(context.Background(), doc)
操作超时
以下示例展示了如何在 Context 中设立操作级超时,该操作级超时优先级于您可能已设立的客户端级超时:
ctx, cancel := context.WithTimeout(context.TODO(), time.Second) defer cancel() res, err := coll.InsertOne(ctx, bson.D{{"x", 2}})