Maison > développement back-end > Golang > Pourquoi mon programme Go obtient-il l'erreur « Les ID d'objet doivent avoir une longueur exacte de 12 octets » lors de la récupération de documents par ID à l'aide de mgo ?

Pourquoi mon programme Go obtient-il l'erreur « Les ID d'objet doivent avoir une longueur exacte de 12 octets » lors de la récupération de documents par ID à l'aide de mgo ?

DDD
Libérer: 2024-10-29 17:59:02
original
333 Les gens l'ont consulté

Why Does My Go Program Get

Impossible de récupérer l'ID du document à l'aide de mgo dans Go

Problème :

Dans un programme Go utilisant la bibliothèque mgo pour interagissez avec une base de données MongoDB, le code permettant de récupérer un document par ID échoue avec l'erreur : "Les ObjectID doivent avoir une longueur exacte de 12 octets (en obtenu 24)". Un document avec l'ID spécifié existe dans la base de données, mais la requête ne renvoie aucun résultat.

Code du problème :

<code class="go">session.SetMode(mgo.Monotonic, true)
coll := session.DB("aaaw_web").C("cron_emails")
var result Result
fmt.Printf("%v", message.ID)
err = coll.FindId(bson.ObjectId(message.ID)).One(&result)
fmt.Printf("%v", result)
fmt.Println(err)</code>
Copier après la connexion

Cause :

Le message d'erreur indique que l'ID fourni n'est pas un ObjectId valide. Dans ce cas, le problème réside dans la conversion de l'ID de chaîne en un bson.ObjectId.

Solution :

Pour convertir correctement une représentation sous forme de chaîne d'un ObjectId en a bson.ObjectId, utilisez la fonction bson.ObjectIdHex().

<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
Copier après la connexion

Cette fonction accepte une chaîne contenant la représentation hexadécimale de l'ObjectId et renvoie une valeur bson.ObjectId valide.

Explication :

Un bson.ObjectId est une valeur de 12 octets représentée sous la forme d'une chaîne de 24 caractères hexadécimaux. La conversion de type effectuée dans le code d'origine a interprété la chaîne de 24 caractères comme données brutes pour bson.ObjectId, ce qui a abouti à un ObjectId de 24 octets non valide. L'utilisation de bson.ObjectIdHex() garantit que la chaîne est correctement analysée et convertie en un ObjectId valide avec la longueur d'octet appropriée.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal