Trouver un identifiant avec la bibliothèque mgo dans Golang
Dans le code fourni, un problème courant survient lorsque vous essayez de trouver un document par son identifiant en utilisant la bibliothèque mgo à Golang. La clé pour comprendre cette erreur réside dans la nature des ID d'objet dans MongoDB.
Comprendre les ID d'objet
Les ID d'objet dans MongoDB sont des valeurs hexadécimales uniques de 12 octets qui servent comme clé primaire pour chaque document. Cependant, lorsque vous travaillez avec Golang, ces identifiants sont souvent représentés sous forme de chaînes hexadécimales de 24 caractères. En effet, ces chaînes codent les 12 octets de l'ID d'objet en utilisant deux chiffres hexadécimaux par octet.
L'erreur
Le message d'erreur "Les ID d'objet doivent faire exactement 12 octets long (got 24)" indique que le code tente d'utiliser une chaîne de 24 caractères comme ID d'objet. Cependant, MongoDB attend un ID d'objet de 12 octets, ce qui n'est pas ce que représente la chaîne de 24 caractères.
La solution
La solution à ce problème consiste à utiliser la fonction bson.ObjectIdHex() pour convertir la chaîne hexadécimale de 24 caractères en un bson.ObjectId valide. Le code modifié devrait ressembler à ceci :
<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
Maintenant, la variable err indiquera correctement si le document avec l'ID spécifié a été trouvé.
Conversion arrière
Dans les scénarios où vous disposez d'un bson.ObjectId et devez obtenir sa représentation hexadécimale à 24 caractères, vous pouvez utiliser la méthode ObjectId.Hex().
Informations supplémentaires
Il est important de noter que même si le message d'erreur suggère que l'écart de longueur était de 24 octets, il s'agit en réalité de 12 octets. En effet, la taille d'un ID d'objet est de 12 octets, mais le message d'erreur inclut également les guillemets qui entourent la chaîne hexadécimale.
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!