Go MongoDB驱动程序成功连接到数据库,但不会检索任何内容

omjgkv6w  于 2023-05-22  发布在  Go
关注(0)|答案(1)|浏览(237)

我正在尝试使用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.昨天这个密码还能用。
任何帮助或我应该在哪里开始调试将不胜感激。谢谢!

rta7y2nd

rta7y2nd1#

正如@Zeke Lu所说,过滤器不能为nil。应使用bson.D{},然后提供空过滤器。

相关问题