"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué MGO.Findid () no puede recuperar documentos con una ID de objeto hexadecimal?

¿Por qué MGO.Findid () no puede recuperar documentos con una ID de objeto hexadecimal?

Publicado el 2025-03-23
Navegar:206

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

Solución de problemas de recuperación de ID de MongoDB con la biblioteca MGO de Golang

cuando se usa la biblioteca MGO para operaciones de MongoDB en Golang, los desarrolladores pueden encontrar un problema en el que no pueden encontrar un ID de identificación. Este problema es evidente desde el siguiente fragmento de código y su salida:

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

A pesar del documento existente en MongoDB, el código no logra recuperarlo. Para resolver este problema, es crucial comprender la naturaleza de las identificaciones de objeto en mongodb.

entendiendo los identificadores de objeto en mongodb

Los ids de objeto en MongoDb son valores de 12 bytes que consisten en los siguientes componentes:

    4 bytes de los siguientes valores de los objetivos de los siguientes componentes: created
  • 3 bytes of machine identifier
  • 2 bytes of process identifier
  • 3 bytes of random bytes

Converting Hexadecimal String to MongoDB Object ID

In the code snippet provided, El valor de Message.id es una representación de cadena hexadecimal de 24 caracteres de la ID de objeto. Para convertir esta cadena en una ID de objeto MongoDB, debe usar la función bson.objectidhex ():

err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)
[&] [&] Y utilizando las funciones apropiadas para convertir entre representaciones hexadecimales e ID de objeto, los desarrolladores pueden recuperar efectivamente documentos utilizando la biblioteca MGO.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3