我正在尝试使用golang mongodb官方驱动程序连接到我的mongo Atlas数据库。问题是,连接似乎成功,但客户端不会检索任何内容。我尝试记录ListDatabaseNames()
和ListCollectionNames()
,但它总是返回一个空数组,就像数据库是空的一样。连接字符串正确。我在一个NodeJS项目中使用了同样的一个,它工作得很好。仅仅复制粘贴相同的db uri到go项目是行不通的。代码如下:
// Use the SetServerAPIOptions() method to set the Stable API version to 1
serverAPI := options.ServerAPI(options.ServerAPIVersion1)
opts := options.Client().ApplyURI("mongodb+srv://<username>:<password>@my_mongodb_cluster.mongodb.net/?retryWrites=true&w=majority").SetServerAPIOptions(serverAPI)
// Create a new client and connect to the server
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
// Send a ping to confirm a successful connection
if err := client.Database("MY_DB").RunCommand(context.TODO(), bson.D{{Key: "ping", Value: 1}}).Err(); err != nil {
panic(err)
}
log.Println("Pinged your deployment. You successfully connected to MongoDB!")
count, err := client.ListDatabaseNames(context.Background(), nil) // always returns []
log.Println(count)
if err != nil {
log.Fatalln("Error", err)
}
上面的代码片段直接从mongodb Atlas复制而来。以下是一些需要注意的事项:
1.当提供不存在的数据库名称client.Database("NON_EXISTING_DB_NAME")
时,它不会死机
1.将相同的uri复制粘贴到nodejs项目中效果很好。
1.更改用户名和密码会导致连接失败,因此我假设凭据是正确的.
1.昨天这个密码还能用。
任何帮助或我应该在哪里开始调试将不胜感激。谢谢!
1条答案
按热度按时间rta7y2nd1#
正如@Zeke Lu所说,过滤器不能为nil。应使用
bson.D{}
,然后提供空过滤器。