Maison > développement back-end > Golang > Pourquoi mon code Go utilisant mgo ne parvient-il pas à trouver un document MongoDB par son _id, même si le _id existe ?

Pourquoi mon code Go utilisant mgo ne parvient-il pas à trouver un document MongoDB par son _id, même si le _id existe ?

Barbara Streisand
Libérer: 2024-12-30 22:12:15
original
420 Les gens l'ont consulté

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

Rechercher par identifiant avec mgo

Question : Je souhaite rechercher une donnée par _id. Je sais que ces données existent et que ce _id existe (je l'ai testé avec pymongo). Cependant, le code ci-dessous ne le trouve pas :

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
}
Copier après la connexion

Réponse : Il existe deux façons de rechercher par identifiant en utilisant Collection.FindId() ou Collection.Find().

Utilisation de Collection.FindId() : transmettez uniquement l'identifiant value.

err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data)
Copier après la connexion

Utilisation de Collection.Find() : Spécifiez une valeur avec le nom du champ.

err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).
    One(&data)
Copier après la connexion

Si vous obtenez toujours 0 comme valeur de id_cookie.IdCookie, cela signifie que le champ du document contenant cet identifiant a un nom différent. Utilisez les balises struct pour le mapper en conséquence.

type id_cookie struct {
    IdCookie int `bson:"myid"`
}
Copier après la connexion

Pour éviter les problèmes de performances, connectez-vous une fois au serveur MongoDB et réutilisez la session. Pour plus de détails, reportez-vous au fil de discussion suivant : [mgo - les performances des requêtes semblent constamment lentes (500-650 ms)](https://groups.google.com/forum/#!topic/golang-nuts/8_EH7KO_S4Y).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal