ホームページ >バックエンド開発 >Golang >mgo でドキュメントを取得すると、「オブジェクト ID は正確に 12 バイトの長さである必要があります (24 バイトです)」というメッセージが表示されるのはなぜですか?

mgo でドキュメントを取得すると、「オブジェクト ID は正確に 12 バイトの長さである必要があります (24 バイトです)」というメッセージが表示されるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 09:27:30210ブラウズ

Why Am I Getting

Go での mgo を使用した Mongo ID 取得のトラブルシューティング

Go で MongoDB 操作に mgo ライブラリを使用すると、ドキュメントをそのIDで確認します。この記事は、そのような問題の 1 つを解決することを目的としており、「ObjectID は正確に 12 バイトの長さである必要があります (24 バイトを取得しました)。」

問題:

の場合FindId メソッドを使用して ID でドキュメントを取得しようとすると、指定された ID の長さが予期された 12 バイトではなく 24 バイトであることを示すエラーが表示されます。 MongoDB 内のドキュメントの存在を確認したにもかかわらず、ドキュメントの取得に失敗しました。

答え:

エラー メッセージには重要なヒントが含まれています。「ObjectID は正確に 12 でなければなりません」バイト長 (24 バイト)。これは、使用している ID が有効な ObjectId 値ではないことを意味します。

Go では、MongoDB のオブジェクト ID は 12 バイトの値として表されます。ただし、使用している ID は 24 文字です。この不一致は、各バイトが 2 つの 16 進数で表される ID の 16 進数表現から発生します。

問題を解決するには、bson.ObjectIdHex 関数を使用して、24 文字の 16 進数 ID を次の形式に変換する必要があります。有効な bson.ObjectId 値。修正されたコードは次のようになります。

<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>

または、ObjectId.Hex メソッドを使用して、ObjectId 値の 16 進表現を取得できます。これにより、必要に応じて文字列形式で ID を操作できるようになります。

これらの手順に従うと、mgo ライブラリを使用して ID によってドキュメントを効果的に取得でき、指定された ID が正しい形式であることを確認し、サイズ。

以上がmgo でドキュメントを取得すると、「オブジェクト ID は正確に 12 バイトの長さである必要があります (24 バイトです)」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。