使用mgo 透過ID 尋找文件
問題:
問題: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 方法無法找到MongoDB 集合中已知存在的記錄。該程式碼反而回傳零值。這是什麼問題?
答案:err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) // OR err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)問題出在 FindId 的方法簽名。它只需要 ID 作為參數,而 Find 需要一個映射,其中還指定了欄位名稱。要解決此問題,請使用以下程式碼:
type id_cookie struct { IdCookie int `bson:"myid"` }如果沒有發生錯誤,則已成功找到文件。如果 IdCookie 欄位仍然為零,則它可能以不同的名稱儲存在 MongoDB 中。使用結構標籤正確地對應它:此外,建議建立與 MongoDB 的單一連接並重複使用它,而不是為每個查詢建立一個新連接。有關查詢效能最佳化的更多詳細信息,請參閱連結的討論。
以上是為什麼 `mgo.FindId` 找不到我的 MongoDB 文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!