"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi mgo.findid () ne récupère pas des documents avec un ID d'objet hexadécimal?

Pourquoi mgo.findid () ne récupère pas des documents avec un ID d'objet hexadécimal?

Publié le 2025-03-23
Parcourir:897

Why Does mgo.FindId() Fail to Retrieve Documents with a Hexadecimal Object ID?

Dépasser la récupération de MongoDB ID avec la bibliothèque MGO de Golang

lors de l'utilisation de la bibliothèque MGO pour trouver un ID en utilisant la méthode de découverte. Ce problème est évident à partir de l'extrait de code suivant et de sa sortie:

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)

output:

595f2c1a6edcba0619073263
{ObjectIdHex("") 0   0  0    0 {         0    false 0    } 0 0 0  0 0 0 0}
ObjectIDs must be exactly 12 bytes long (got 24)
not found

Malgré le document existant dans MongoDB, le code ne le récupérera pas. Pour résoudre ce problème, il est crucial de comprendre la nature des ID d'objet dans MongoDB.

Comprendre les ID d'objet dans MongoDB

Les ID d'objet dans MongoDB sont des valeurs 12-byte composées des composants suivants:

Créé
  • 3 octets d'identifiant de machine
  • 2 octets d'identifiant de processus
  • 3 octets d'octets aléatoires
Converting hexadecimal String to Code id

La valeur de Message.id est une représentation de chaîne hexadécimale de 24 caractères de l'ID d'objet. To convert this string to a MongoDB object ID, you must use the bson.ObjectIdHex() function:

err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)

err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)

By understanding the nature of object IDs in MongoDB et en utilisant les fonctions appropriées à convertir entre les représentations hexadécimales et les ID d'objet, les développeurs peuvent récupérer efficacement des documents à l'aide de la bibliothèque MGO.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3