Recherche d'un document par ID avec mgo
Question :
Dans l'exemple de code ci-dessous , un enregistrement connu pour exister dans une collection MongoDB ne peut pas être trouvé à l'aide de la méthode FindId. Le code renvoie une valeur nulle à la place. Quel est le problème ?
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 }
Réponse :
Le problème réside dans la signature de méthode de FindId. Il prend uniquement l'ID comme argument, tandis que Find nécessite une carte dans laquelle le nom du champ est également spécifié. Pour résoudre ce problème, utilisez le code suivant :
err2 := c.FindId(bson.ObjectIdHex("58593d1d6aace357b32bb3a1")).One(&data) // OR err2 := c.Find(bson.M{"_id": bson.ObjectIdHex("58593d1d6aace357b32bb3a1")}).One(&data)
Si aucune erreur ne se produit, le document a été trouvé avec succès. Si le champ IdCookie est toujours nul, il peut être stocké sous un nom différent dans MongoDB. Utilisez les balises struct pour le mapper correctement :
type id_cookie struct { IdCookie int `bson:"myid"` }
De plus, il est recommandé d'établir une seule connexion à MongoDB et de la réutiliser, plutôt que de créer une nouvelle connexion pour chaque requête. Reportez-vous à la discussion liée pour plus de détails sur l'optimisation des performances des requêtes.
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!