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
375 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!

source:php.cn
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