diff --git a/internal/db/mongodb_impl.go b/internal/db/mongodb_impl.go index 5c853f6..27ac0c7 100644 --- a/internal/db/mongodb_impl.go +++ b/internal/db/mongodb_impl.go @@ -251,6 +251,11 @@ func (m *MongoDB) getURI(config connection.ConnectionConfig) string { params.Set("authMechanism", authMechanism) } + // 单机模式且未指定副本集名称时,启用 directConnection 避免驱动自动跟随副本集成员发现 + if strings.TrimSpace(config.Topology) != "replica" && strings.TrimSpace(config.ReplicaSet) == "" && !config.MongoSRV { + params.Set("directConnection", "true") + } + if encoded := params.Encode(); encoded != "" { uri += "?" + encoded } diff --git a/internal/db/mongodb_impl_v1.go b/internal/db/mongodb_impl_v1.go index 26e110a..e3aa5b4 100644 --- a/internal/db/mongodb_impl_v1.go +++ b/internal/db/mongodb_impl_v1.go @@ -252,6 +252,11 @@ func (m *MongoDBV1) getURI(config connection.ConnectionConfig) string { params.Set("authMechanism", authMechanism) } + // 单机模式且未指定副本集名称时,启用 directConnection 避免驱动自动跟随副本集成员发现 + if strings.TrimSpace(config.Topology) != "replica" && strings.TrimSpace(config.ReplicaSet) == "" && !config.MongoSRV { + params.Set("directConnection", "true") + } + if encoded := params.Encode(); encoded != "" { uri += "?" + encoded }