在之前尝试使用 mgo 从 Go 连接到 MongoDB Atlas 时,您遇到了以下问题DialInfo 超时和服务器可达性。让我们探讨这些问题并提供解决方案:
默认的 DialInfo 具有零超时,导致连接建立过程无限期阻塞。要解决此问题,您可以使用以下命令显式设置超时:
dialInfo.Timeout = time.Duration(30) session, err := mgo.DialWithInfo(dialInfo)
您对无法访问的服务器的担忧源于 mgo 缺乏对 SRV 连接字符串 URI 格式的支持(MongoDB v3 .4).要解决此限制,您可以使用非 srv 连接 URI 格式:
mongoURI = "mongodb+srv://admin:password@my-atlas-cluster-01.mongodb.net:27017/dbname?ssl=true&retryWrites=true"
如果您更喜欢在连接 URI 中使用 SRV,请考虑使用蒙戈驱动程序。这是一个示例:
mongoURI := "mongodb+srv://admin:password@my-atlas-cluster-01.mongodb.net/dbname?ssl=true&retryWrites=true" client, err := mongo.NewClient(options.Client().ApplyURI(mongoURI)) if err != nil { log.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() err = client.Connect(ctx) defer client.Disconnect(ctx) if err != nil { log.Fatal(err) } database := client.Database("go") collection := database.Collection("atlas")
请注意,此代码与当前版本的 mongo-go-driver (v1.0.0) 兼容。
以上是如何从 Go 连接到 MongoDB Atlas:解决超时和服务器可达性问题?的详细内容。更多信息请关注PHP中文网其他相关文章!