Maison >développement back-end >Golang >Comment rechercher un document par ID à l'aide de la bibliothèque mgo dans Golang ?

Comment rechercher un document par ID à l'aide de la bibliothèque mgo dans Golang ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 20:51:29372parcourir

How to Find a Document by ID Using mgo Library in Golang?

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!

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