首页 >后端开发 >Golang >为什么 `mgo.FindId` 找不到我的 MongoDB 文档?

为什么 `mgo.FindId` 找不到我的 MongoDB 文档?

Barbara Streisand
Barbara Streisand原创
2024-12-07 18:42:15172浏览

Why Doesn't `mgo.FindId` Find My MongoDB Document?

使用 mgo 通过 ID 查找文档

问题:

在下面的代码示例中,使用 FindId 方法无法找到 MongoDB 集合中已知存在的记录。该代码反而返回零值。这是什么问题?

type id_cookie struct {
    IdCookie int
}

func get_id_mongo() int {
    session, err := mgo.Dial("127.0.0.1")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    c := session.DB("id_bag").C("id_cookie")
    data := id_cookie{}
    err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
    if (err2 != nil){
        Info.Println("error")
        Info.Println(err2)
    }
    Info.Println(data)
    return data.IdCookie
}

答案:

问题出在 FindId 的方法签名上。它只需要 ID 作为参数,而 Find 需要一个映射,其中还指定了字段名称。要解决此问题,请使用以下代码:

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)

// OR
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)

如果没有发生错误,则已成功找到文档。如果 IdCookie 字段仍然为零,则它可能以不同的名称存储在 MongoDB 中。使用结构标签正确映射它:

type id_cookie struct {
    IdCookie int `bson:"myid"`
}

此外,建议建立与 MongoDB 的单个连接并重用它,而不是为每个查询创建一个新连接。有关查询性能优化的更多详细信息,请参阅链接的讨论。

以上是为什么 `mgo.FindId` 找不到我的 MongoDB 文档?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn