質問: _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 で検索するには 2 つの方法があります。
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 ~ 650 ミリ秒)](https://groups.google.com/forum/#!topic/golang-nuts/8_EH7KO_S4Y)。
以上が_id が存在するにもかかわらず、mgo を使用する Go コードが _id による MongoDB ドキュメントの検索に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。