Heim > Backend-Entwicklung > Golang > Warum kann mein Go-Code, der mgo verwendet, ein MongoDB-Dokument nicht anhand seiner _id finden, obwohl die _id vorhanden ist?

Warum kann mein Go-Code, der mgo verwendet, ein MongoDB-Dokument nicht anhand seiner _id finden, obwohl die _id vorhanden ist?

Barbara Streisand
Freigeben: 2024-12-30 22:12:15
Original
375 Leute haben es durchsucht

Why is my Go code using mgo failing to find a MongoDB document by its _id, even though the _id exists?

Mit mgo nach ID suchen

Frage: Ich möchte Daten nach _id finden. Ich weiß, dass diese Daten existieren und dass diese _id existiert (ich habe es mit Pymongo getestet). Der folgende Code findet es jedoch nicht:

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()

    // Optional. Switch the session to a monotonic behavior.
    session.SetMode(mgo.Monotonic, true)

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

Antwort: Es gibt zwei Möglichkeiten, mithilfe von Collection.FindId() oder Collection.Find() nach ID zu suchen.

Verwendung von Collection.FindId(): Übergeben Sie nur die ID value.

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

Mit Collection.Find(): Geben Sie einen Wert mit dem Feldnamen an.

err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).
    One(&data)
Nach dem Login kopieren

Wenn Sie immer noch 0 als Wert von erhalten id_cookie.IdCookie bedeutet, dass das Feld im Dokument, das diese ID enthält, einen anderen Namen hat. Verwenden Sie Struktur-Tags, um es entsprechend zuzuordnen.

type id_cookie struct {
    IdCookie int `bson:"myid"`
}
Nach dem Login kopieren

Um Leistungsprobleme zu vermeiden, stellen Sie einmal eine Verbindung zum MongoDB-Server her und verwenden Sie die Sitzung erneut. Weitere Einzelheiten finden Sie im folgenden Thread: [mgo – Abfrageleistung scheint durchweg langsam (500–650 ms)](https://groups.google.com/forum/#!topic/golang-nuts/8_EH7KO_S4Y).

Das obige ist der detaillierte Inhalt vonWarum kann mein Go-Code, der mgo verwendet, ein MongoDB-Dokument nicht anhand seiner _id finden, obwohl die _id vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage