尝试连接到MongoDB Atlas数据库时,我不断收到以下错误消息。
no reachable servers
exit status 1
我正在运行与mgo兼容的MongoDB 3.4版。
我已将MongoDB Atlas上的所有IP地址列入白名单,包括我自己的IP地址。
我已经在MongoDB Atlas上创建了一个具有管理员权限的用户'root'
。
我正在Ubuntu 18.04上运行,并且我已经将DNS名称服务器设置为8.8.8.8。
我正在使用mgo
中受社区支持的github.com/globalsign/mgo
版本。
我的代码如下:
package main
import (
"fmt"
"log"
"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
)
func main() {
database := "bookstore"
collection := "books"
user := "root"
pword := "root"
url := "mongodb://" + user + ":" + pword + "@<prefix>.mongodb.net:27017/" + database + "?w=majority"
session, err := mgo.Dial(url)
if err != nil {
log.Fatal(err)
} else {
fmt.Println("Success.")
}
}
我看了以下问题。这些不能解决我的问题:
CreateSession: no reachable servers - mgo
How to solve panic: no reachable servers
Connecting to MongoDB Atlas using Golang mgo: Persistent no reachable server to replica set
Golang / MGO -- panic: no reachable servers
No reachable servers on static linked go binary
Go and MongoDB connection won't work with panic log "no reachable server"
No reachable servers on static linked go binary
How to use new URL from mongodb 3.6 to connect from golang
How to connect to remote Mongodb server
任何帮助,我们都感激不尽!
答案 0 :(得分:0)
一个问题是您用来连接到MongoDB Connection String URI集群的Atlas。
MongoDB连接字符串格式有两种类型:
DNS种子列表格式较短,因为它利用了使用DNS的可用服务器的发现。为了利用DNS种子列表,请使用连接字符串前缀mongodb+srv:
而不是标准的mongodb:
。
根据您发布的代码段,您似乎在混用两种格式。如果要使用DNS种子列表格式,则需要指定mongodb+srv:
,如果要使用标准格式,则需要指定其他主机。例如:
"mongodb://FOO-shard-00-00-BAR.mongodb.net:27017,FOO-shard-00-01-BAR.mongodb.net:27017,FOO-shard-00-02-BAR.mongodb.net:27017/test?replicaSet=FOO-shard-0"
请注意,您还使用了globalsign/mgo驱动程序。当前,它不支持DNS种子列表格式,请参见globalsign/mgo/issues#112。另外,globalsign/mgo
当前仅对MongoDB v4.0 +提供实验性支持。
如果您打算使用DNS种子列表连接格式和/或使用MongoDB v3.6 +(目前,最新版本为v4.2),可以尝试使用mongo-go-driver代替< / p>