問題:我想按 _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中文網其他相關文章!