Heim >Backend-Entwicklung >Golang >Warum findet „mgo.FindId' mein MongoDB-Dokument nicht?

Warum findet „mgo.FindId' mein MongoDB-Dokument nicht?

Barbara Streisand
Barbara StreisandOriginal
2024-12-07 18:42:15172Durchsuche

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

Ein Dokument anhand der ID mit mgo finden

Frage:

Im folgenden Codebeispiel , kann ein Datensatz, von dem bekannt ist, dass er in einer MongoDB-Sammlung vorhanden ist, mit der FindId-Methode nicht gefunden werden. Der Code gibt stattdessen einen Nullwert zurück. Was ist das Problem?

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
}

Antwort:

Das Problem liegt in der Methodensignatur von FindId. Es benötigt nur die ID als Argument, während Find eine Karte erfordert, in der auch der Feldname angegeben ist. Um dies zu beheben, verwenden Sie den folgenden Code:

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

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

Wenn keine Fehler auftreten, wurde das Dokument erfolgreich gefunden. Wenn das IdCookie-Feld immer noch Null ist, wird es möglicherweise unter einem anderen Namen in MongoDB gespeichert. Verwenden Sie Struktur-Tags, um es korrekt zuzuordnen:

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

Darüber hinaus wird empfohlen, eine einzelne Verbindung zu MongoDB herzustellen und diese wiederzuverwenden, anstatt für jede Abfrage eine neue Verbindung zu erstellen. Weitere Informationen zur Optimierung der Abfrageleistung finden Sie in der verlinkten Diskussion.

Das obige ist der detaillierte Inhalt vonWarum findet „mgo.FindId' mein MongoDB-Dokument nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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