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
Libérer: 2024-12-07 18:42:15
original
193 Les gens l'ont consulté

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

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

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

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!

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