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 }
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)
Utilisation de Collection.Find() : Spécifiez une valeur avec le nom du champ.
err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}). One(&data)
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"` }
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!