Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Trabajar con datos JSON ampliados

En esta guía, puedes aprender a usar el formato Extended JSON en el driver de C.

JSON es un formato de datos que representa los valores de objetos, arreglos, números, cadenas, booleanos y nulos. Este formato solo admite un subconjunto de tipos de datos BSON, que es el formato que utiliza MongoDB para almacenar datos. El formato Extended JSON admite más BSON types, definiendo un conjunto reservado de claves con el prefijo "$" para representar información del tipo de campo que corresponde directamente a cada tipo en BSON.

Para obtener más información sobre la diferencia entre estos formatos, consulta el recurso JSON y BSON.

MongoDB Extended JSON presenta diferentes formatos de string para representar los datos BSON. Cada uno de los diferentes formatos se ajusta al RFC de JSON y cumple con casos de uso específicos.

La siguiente tabla describe cada formato:

Nombre
Descripción

Extendido

También conocida como formato canónico, esta representación JSON evita la pérdida de información de tipo BSON.
Este formato prioriza la preservación de tipos a costa de la legibilidad humana y la interoperabilidad con formatos más antiguos.

Modo Relajado

Representación JSON que describe documentos BSON con cierta pérdida de información de tipo.
Este formato da prioridad a la facilidad de lectura humana y a la interoperabilidad a costa de perder cierta información sobre los tipos.

Shell

Obsoleto. Representación JSON que coincide con la sintaxis utilizada en el shell de MongoDB.
Este formato prioriza la compatibilidad con el shell de MongoDB, que a menudo utiliza funciones de JavaScript para representar tipos.
La API heredada utiliza este formato.

Estricto

Obsoleto. Esta representación es el formato heredado que se ajusta completamente al RFC de JSON, lo que permite que cualquier analizador de JSON lea la información de tipo.
La API heredada utiliza este formato.

Nota

El driver analiza el tipo Extended JSON de $uuid de un string a datos binarios con el subtipo 4 (BSON_SUBTYPE_UUID). Para obtener más información sobre el análisis de campo $uuid, consulte las reglas especiales para analizar los campos $uuid.

Para obtener información más detallada sobre estos formatos, consulte los siguientes recursos:

Los siguientes ejemplos muestran un documento que contiene un campo ObjectId, una fecha y un número largo representado en cada formato Extendido de JSON. Haz clic en la pestaña que corresponda al formato del ejemplo que desees ver:

{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": { "$numberLong": "1601499609" }},
"numViews": { "$numberLong": "36520312" }
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "2020-09-30T18:22:51.648Z" },
"numViews": 36520312
}
{
"_id": ObjectId("573a1391f29313caabcd9637"),
"createdAt": ISODate("2020-09-30T18:22:51.648Z"),
"numViews": NumberLong("36520312")
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": 1601499609 },
"numViews": { "$numberLong": "36520312" }
}

Puede leer una Extended JSON string en un documento BSON llamando a la función bson_new_from_json(). Esta función analiza la cadena Extended JSON string y devuelve una estructura bson_t que contiene los datos.

El siguiente ejemplo muestra cómo puede leer un ejemplo de string JSON extendida en un documento bson_t:

/* Read Extended JSON string to BSON */
const char *ejson_str = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"},"
"\"myNumber\": {\"$numberLong\": \"4794261\" }}";
bson_error_t error;
bson_t *doc = bson_new_from_json ((const uint8_t *)ejson_str, -1, &error);

Para obtener más información, consulta la documentación de la API bson_new_from_json() y bson_as_canonical_extended_json().

También puedes analizar cadenas Extended JSON usando el tipo bson_json_reader_t, que ofrece una interfaz de transmisión para convertir JSON en BSON. Esto es particularmente útil al realizar el procesamiento de múltiples documentos JSON o cuando necesitas más control sobre el proceso de análisis.

El siguiente ejemplo de código muestra cómo puedes usar bson_json_reader_t para convertir una string de JSON extendido en un documento BSON:

const char *ejson_str = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\"},"
"\"myNumber\": {\"$numberLong\": \"4794261\" }}";
bson_json_reader_t *reader;
bson_error_t error;
bson_t doc = BSON_INITIALIZER;
int ret;
reader = bson_json_data_reader_new (false, 0);
bson_json_data_reader_ingest (reader, (const uint8_t *)ejson_str, strlen (ejson_str));
ret = bson_json_reader_read (reader, &doc, &error);
if (ret > 0) {
bson_iter_t iter;
if (bson_iter_init (&iter, &doc)) {
while (bson_iter_next (&iter)) {
const char *key = bson_iter_key (&iter);
if (strcmp (key, "_id") == 0 && BSON_ITER_HOLDS_OID (&iter)) {
const bson_oid_t *oid = bson_iter_oid (&iter);
char oid_str[25];
bson_oid_to_string (oid, oid_str);
printf ("%s is type: ObjectId\n", oid_str);
}
if (strcmp (key, "myNumber") == 0 && BSON_ITER_HOLDS_INT64 (&iter)) {
int64_t number = bson_iter_int64 (&iter);
printf ("%ld is type: int64_t\n", (long)number);
}
}
}
} else if (ret < 0) {
printf ("Error: %s\n", error.message);
}
bson_json_reader_destroy (reader);
bson_destroy (&doc);
507f1f77bcf86cd799439011 is type: ObjectId
4794261 is type: int64_t

Para obtener más información, consulte la siguiente documentación de la API:

Puedes escribir un documento BSON como una string JSON Extendida llamando a la función bson_as_json_with_opts(). Esta función convierte un documento bson_t en una string JSON Extendida con opciones para especificar el formato de salida.

El siguiente ejemplo muestra cómo crear un documento BSON y exportarlo como JSON ampliado en formato relajado:

bson_t *doc;
bson_oid_t oid;
bson_json_opts_t *opts;
char *json_str;
// Create a BSON document
doc = bson_new ();
bson_oid_init_from_string (&oid, "507f1f77bcf86cd799439012");
bson_append_oid (doc, "_id", -1, &oid);
bson_append_int32 (doc, "myNumber", -1, 11223344);
// Configure JSON output options for Relaxed mode
opts = bson_json_opts_new (BSON_JSON_MODE_RELAXED, BSON_MAX_LEN_UNLIMITED);
// Convert to Extended JSON
json_str = bson_as_json_with_opts (doc, NULL, opts);
printf ("%s\n", json_str);
// Cleanup
bson_free (json_str);
bson_json_opts_destroy (opts);
bson_destroy (doc);
{ "_id" : { "$oid" : "507f1f77bcf86cd799439012" }, "myNumber" : 11223344 }

Para obtener más información, vea la documentación de la API bson_as_json_with_opts().

Para obtener más información sobre las funciones y tipos que puedes utilizar para trabajar con datos JSON extendidos, consulta la documentación de la API: