ホームページ > バックエンド開発 > Golang > mgo.FindId() が 16 進数のオブジェクト ID を持つドキュメントの取得に失敗するのはなぜですか?

mgo.FindId() が 16 進数のオブジェクト ID を持つドキュメントの取得に失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-10-31 07:17:30
オリジナル
223 人が閲覧しました

Why Does mgo.FindId() Fail to Retrieve Documents with a Hexadecimal Object ID?

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 バイトの値です次のコンポーネントで構成されます:

  • オブジェクトの作成時間を表す 4 バイトのタイムスタンプ
  • 3 バイトのマシン識別子
  • 2 バイトのプロセス識別子
  • 3 バイトのランダム バイト

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 サイトの他の関連記事を参照してください。

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