首页 > 后端开发 > Golang > 为什么我使用 mgo 的 Go 代码无法通过 _id 找到 MongoDB 文档,即使 _id 存在?

为什么我使用 mgo 的 Go 代码无法通过 _id 找到 MongoDB 文档,即使 _id 存在?

Barbara Streisand
发布: 2024-12-30 22:12:15
原创
375 人浏览过

Why is my Go code using mgo failing to find a MongoDB document by its _id, even though the _id exists?

使用 mgo 按 id 查找

问题:我想按 _id 查找数据。我知道这个数据存在并且这个 _id 存在(我已经用 pymongo 测试过)。但是,下面的代码没有找到它:

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()

    // Optional. Switch the session to a monotonic behavior.
    session.SetMode(mgo.Monotonic, true)

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

答案:有两种方法可以使用 Collection.FindId() 或 Collection.Find() 按 id 查找。

使用 Collection.FindId():仅传递 id value.

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
登录后复制

使用 Collection.Find():用字段名称指定一个值。

err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).
    One(&data)
登录后复制

如果仍然得到 0 作为值id_cookie.IdCookie,表示文档中保存该id的字段有不同的名称。使用结构体标签进行相应的映射。

type id_cookie struct {
    IdCookie int `bson:"myid"`
}
登录后复制

为了避免性能问题,请连接到 MongoDB 服务器一次并重复使用会话。有关更多详细信息,请参阅以下线程:[mgo - 查询性能似乎一直很慢(500-650ms)](https://groups.google.com/forum/#!topic/golang-nuts/8_EH7KO_S4Y)。

以上是为什么我使用 mgo 的 Go 代码无法通过 _id 找到 MongoDB 文档,即使 _id 存在?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板