Convertir JSON a estructuras Go para BSON — Numio
Reescribe un documento JSON como un literal de Go construido con bson.M (objetos) y bson.A (arrays) para el driver de MongoDB para Go, con las comas finales que exige Go. Las claves conservan su orden, null pasa a nil y las cadenas se copian sin cambios.
Pasar a código Go una consulta o filtro de MongoDB probado en mongosh o Compass.
JSON
Go Bson
Cuándo usarla
- Pasar a código Go una consulta o filtro de MongoDB probado en mongosh o Compass.
- Escribir una etapa de agregación o un documento de actualización como literal de Go en línea dentro de un test.
Cómo usarla
- Pega la consulta, el filtro o el documento como JSON estricto (claves entre comillas, sin helpers de shell como ObjectId(...) o ISODate(...)).
- Copia el literal bson.M{...} del panel de Go; los operadores como $gte, $in y $or se mantienen como claves de tipo string.
- Importa go.mongodb.org/mongo-driver/bson y pasa el valor a Find, UpdateOne o Aggregate, ajustando los tipos según se indica abajo.
Entrada JSON
{
"status": "active",
"deletedAt": null,
"age": { "$gte": 18 },
"tags": { "$in": ["go", "mongo"] },
"$or": [
{ "verified": true },
{ "score": { "$gt": 90 } }
]
}Go bson.M / bson.A
bson.M{
"status": "active",
"deletedAt": nil,
"age": bson.M{
"$gte": 18,
},
"tags": bson.M{
"$in": bson.A{
"go",
"mongo",
},
},
"$or": bson.A{
bson.M{
"verified": true,
},
bson.M{
"score": bson.M{
"$gt": 90,
},
},
},
}Detalles y limitaciones
El JSON se parsea y se recorre en el navegador para construir el literal; no se envía nada a ningún servidor.
null pasa a nil. Los números son constantes de Go sin tipo, así que 18 pasa a int y 1.5 a float64; los enteros mayores que 2^53 pierden precisión al parsear el JSON.
Las cadenas se escriben como literales string de Go, así que los corchetes o llaves que contengan, como "tags[0]", no se tocan.
La salida es bson.M, que no tiene orden. Usa bson.D cuando importe el orden de los campos, como en documentos de ordenación o algunas etapas de pipeline.
FAQ
¿Puedo pegar una consulta de mongosh con ObjectId() o ISODate()?
No. La entrada debe ser JSON válido, así que los helpers de shell provocan un error de parseo. Usa cadenas simples y luego sustitúyelas en Go por un ObjectID a partir de hex (primitive.ObjectIDFromHex en el driver v1) o por un valor time.Time.
¿Genera structs de Go?
No, solo produce literales de map y slice. Para structs tipados con tags json usa la página JSON a Go.
¿La raíz tiene que ser un objeto?
No. Un array en la raíz pasa a bson.A{...}, lo que encaja con un pipeline de agregación, donde cada etapa es un bson.M.