Maison >développement back-end >Golang >Pourquoi « mgo.FindId » ne trouve-t-il pas mon document MongoDB ?

Pourquoi « mgo.FindId » ne trouve-t-il pas mon document MongoDB ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 18:42:15172parcourir

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

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!

Déclaration:
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