Golang の MGO ライブラリを使用した MongoDB ID 取得のトラブルシューティング
Golang で MongoDB 操作に mgo ライブラリを使用する場合、開発者は次の問題に遭遇する可能性があります。 FindId メソッドを使用して ID を見つけることができません。この問題は、次のコード スニペットとその出力から明らかです。
<code class="go">session.SetMode(mgo.Monotonic, true) coll := session.DB("aaaw_web").C("cron_emails") var result Result fmt.Printf("%v", message.ID) err = coll.FindId(bson.ObjectId(message.ID)).One(&result) fmt.Printf("%v", result) fmt.Println(err)</code>
出力:
595f2c1a6edcba0619073263 {ObjectIdHex("") 0 0 0 0 { 0 false 0 } 0 0 0 0 0 0 0} ObjectIDs must be exactly 12 bytes long (got 24) not found
MongoDB にドキュメントが存在するにもかかわらず、コードはドキュメントの取得に失敗します。この問題を解決するには、MongoDB のオブジェクト ID の性質を理解することが重要です。
MongoDB のオブジェクト ID について
MongoDB のオブジェクト ID は 12 バイトの値です次のコンポーネントで構成されます:
16 進文字列を MongoDB オブジェクト ID に変換
提供されたコード スニペットでは、message.ID の値は次のとおりです。オブジェクト ID の 24 文字の 16 進文字列表現。この文字列を MongoDB オブジェクト ID に変換するには、bson.ObjectIdHex() 関数を使用する必要があります。
<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
結論
オブジェクト ID の性質を理解することによってMongoDB を使用し、適切な関数を利用して 16 進表現とオブジェクト ID の間で変換すると、開発者は mgo ライブラリを使用してドキュメントを効果的に取得できます。
以上がmgo.FindId() が 16 進数のオブジェクト ID を持つドキュメントの取得に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。