Golang の mgo ライブラリで ID を検索
提供されたコードでは、次を使用して ID でドキュメントを検索しようとすると、一般的な問題が発生します。 Golang の mgo ライブラリ。このエラーを理解する鍵は、MongoDB のオブジェクト ID の性質にあります。
オブジェクト ID について
MongoDB のオブジェクト ID は、サービスを提供する一意の 12 バイトの 16 進値です。すべてのドキュメントの主キーとして。ただし、Golang を使用する場合、これらの ID は 24 文字の 16 進文字列として表されることがよくあります。これは、これらの文字列が、1 バイトあたり 2 桁の 16 進数を使用してオブジェクト ID の 12 バイトをエンコードしているためです。
エラー
エラー メッセージ「ObjectIDs は正確に 12 バイトである必要があります」 「long (got 24)」は、コードが 24 文字の文字列をオブジェクト ID として使用しようとしていることを示します。ただし、MongoDB は 12 バイトのオブジェクト ID を想定しており、これは 24 文字の文字列が表すものではありません。
解決策
この問題の解決策は、次のとおりです。 bson.ObjectIdHex() 関数を使用して、24 文字の 16 進文字列を有効な bson.ObjectId に変換します。変更されたコードは次のようになります。
<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
これで、err 変数は、指定された ID を持つドキュメントが見つかったかどうかを正しく示すようになります。
Converting Back
bson.ObjectId があり、その 24 文字の 16 進表現を取得する必要があるシナリオでは、ObjectId.Hex() メソッドを使用できます。
追加情報
エラー メッセージでは長さの不一致が 24 バイトであることが示されていますが、実際には 12 バイトであることに注意することが重要です。これは、オブジェクト ID のサイズが 12 バイトであるためですが、エラー メッセージには 16 進文字列を囲む引用符も含まれているためです。
以上がGolang の mgo ライブラリを使用して ID でドキュメントを検索する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。