gopkg - mgo golang sort
¿Por qué no puedo encontrar la identificación usando la biblioteca mgo de golang? (1)
Estoy usando la biblioteca mgo para mongo operationg en golang y aquí está mi código:
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)
Estoy obteniendo esta salida:
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
Pero lo verifiqué, el documento existe en mongo, pero al llegar aquí no hay ningún resultado, ni idea de qué me estoy perdiendo ...
Como indica el mensaje de error, una identificación de objeto tiene exactamente 12 bytes de longitud (12 bytes de datos). La ID de 24 caracteres que ve impresa es la representación hexadecimal de los 12 bytes de la ID (1 byte => 2 dígitos hexadecimales).
Utilice la función bson.ObjectIdHex()
para obtener un valor de bson.ObjectId
si la representación hexadecimal está disponible.
err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)
Para la dirección inversa, puede usar el método ObjectId.Hex()
, detallado en esta respuesta: Obtener el valor de ObjectIdHex de la consulta de mgo
Lo que hizo en su código es una conversión de tipo simple (dado ese message.ID
es de tipo string
), y la sintaxis es válida porque el tipo subyacente de bson.ObjectId
es string
, por lo que básicamente interpreta los 24 caracteres como bson.ObjectId
tipo, pero es un valor inválido de ObjectId
porque tendrá 24 bytes y no 12.