首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板