ホームページ >バックエンド開発 >Golang >「mgo.FindId」が MongoDB ドキュメントを見つけられないのはなぜですか?

「mgo.FindId」が MongoDB ドキュメントを見つけられないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 18:42:15172ブラウズ

Why Doesn't `mgo.FindId` Find My MongoDB Document?

mgo を使用した ID によるドキュメントの検索

質問:

以下のコード例、MongoDB コレクションに存在することがわかっているレコードは、FindId メソッドを使用して見つけることができません。コードは代わりにゼロ値を返します。問題は何ですか?

type id_cookie struct {
    IdCookie int
}

func get_id_mongo() int {
    session, err := mgo.Dial("127.0.0.1")
    if err != nil {
        panic(err)
    }
    defer session.Close()

    c := session.DB("id_bag").C("id_cookie")
    data := id_cookie{}
    err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
    if (err2 != nil){
        Info.Println("error")
        Info.Println(err2)
    }
    Info.Println(data)
    return data.IdCookie
}

答え:

問題は FindId のメソッド シグネチャにあります。これは引数として ID のみを受け取りますが、Find ではフィールド名も指定されたマップが必要です。これを修正するには、次のコードを使用します。

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)

// OR
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)

エラーが発生しない場合、ドキュメントは正常に見つかりました。 IdCookie フィールドがまだゼロの場合は、MongoDB に別の名前で保存されている可能性があります。構造体タグを使用して正しくマッピングします。

type id_cookie struct {
    IdCookie int `bson:"myid"`
}

さらに、クエリごとに新しい接続を作成するのではなく、MongoDB への単一の接続を確立して再利用することをお勧めします。クエリ パフォーマンスの最適化の詳細については、リンクされた説明を参照してください。

以上が「mgo.FindId」が MongoDB ドキュメントを見つけられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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