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>
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>
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!