ホームページ > バックエンド開発 > Golang > mgo を使用して ID によってドキュメントを取得すると、Go プログラムで「ObjectIDs Must be Exactly 12 Bytes Long」エラーが発生するのはなぜですか?

mgo を使用して ID によってドキュメントを取得すると、Go プログラムで「ObjectIDs Must be Exactly 12 Bytes Long」エラーが発生するのはなぜですか?

DDD
リリース: 2024-10-29 17:59:02
オリジナル
333 人が閲覧しました

Why Does My Go Program Get

Go で mgo を使用してドキュメント ID を取得できません

問題:

Go プログラムで mgo ライブラリを使用してMongoDB データベースと対話する場合、ID によってドキュメントを取得するコードは、「ObjectID は正確に 12 バイトの長さである必要があります (24 バイトを取得)」というエラーで失敗します。指定された 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>
ログイン後にコピー

原因:

エラー メッセージは、指定された ID が有効な ObjectId ではないことを示します。この場合、問題は文字列 ID の bson.ObjectId への変換にあります。

解決策:

ObjectId の文字列表現を適切に変換するにはbson.ObjectId の場合は、bson.ObjectIdHex() 関数を使用します。

<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
ログイン後にコピー

この関数は、ObjectId の 16 進表現を含む文字列を受け取り、有効な bson.ObjectId 値を返します。

説明:

bson.ObjectId は、24 個の 16 進文字の文字列として表される 12 バイトの値です。元のコードで実行された型変換では、24 文字の文字列が bson.ObjectId の生データとして解釈され、無効な 24 バイトの ObjectId が生成されました。 bson.ObjectIdHex() を使用すると、文字列が正しく解析され、適切なバイト長を持つ有効な ObjectId に変換されます。

以上がmgo を使用して ID によってドキュメントを取得すると、Go プログラムで「ObjectIDs Must be Exactly 12 Bytes Long」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート