Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Trabajar con datos JSON ampliados

JSON es un formato de datos que representa los valores de objetos, arreglos, números, cadenas, booleanos y nulos. El formato Extended JSON define un conjunto reservado de claves con el prefijo "$" para representar la información del tipo de campo que corresponde directamente a cada tipo en BSON, el formato que MongoDB utiliza para almacenar datos.

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 satisface casos de uso específicos. El formato Ampliado, también conocido como formato Canónico, cuenta con representaciones específicas para cada tipo BSON que permiten una conversión bidireccional sin pérdida de información. El formato de Modo relajado es más conciso y se acerca más al JSON ordinario, pero no representa toda la información del tipo, como el ancho de bit específico de los campos numéricos.

Consulte la siguiente tabla para ver una descripción de cada formato:

Nombre
Descripción

Extendido

También conocido 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 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 prioriza la legibilidad y la interoperabilidad, aunque a costa de la pérdida de cierta información de tipo.

Para obtener más información sobre JSON, BSON y JSON extendido, consulta nuestro artículo sobre JSON y BSON y JSON extendido en el manual de MongoDB Server.

Los siguientes ejemplos muestran un documento que contiene un ObjectId, una fecha y un campo de número largo representados en el formato JSON extendido. Haz clic en la pestaña que corresponde al formato del ejemplo que deseas ver:

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

Puedes escribir una string JSON extendida desde un objeto de documento BSON usando el método EJSON.stringify().

El siguiente ejemplo genera una string JSON extendida en el formato relajado:

import { Code, BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const doc = {
foo: [1, 2],
bar: { hello: "world" },
code: new Code("function x() { return 1; }", {}),
date: new Date(2024, 6, 20, 10, 30, 0),
};
const ejsonStr = EJSON.stringify(doc);
console.log(ejsonStr);
{"foo":[1,2],"bar":{"hello":"world"},"code":{"$code":"function x() { return 1; }","$scope":{}},"date":{"$date":"2024-07-20T14:30:00Z"}}

Por defecto, el método stringify() devuelve la string Extended JSON en formato relajado. Para especificar el formato canónico, configure la opción relaxed en false.

El siguiente ejemplo muestra cómo producir JSON extendido en el formato estándar:

import { Code, BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const doc = {
foo: [1, 2],
bar: { hello: "world" },
code: new Code("function x() { return 1; }", {}),
date: new Date(2024, 6, 20, 10, 30, 0),
};
const ejsonStr = EJSON.stringify(doc, { relaxed: false });
print(ejsonStr)
{"foo":[{"$numberInt":"1"},{"$numberInt":"2"}],"bar":{"hello":"world"},"code":{"$code":"function x() { return 1; }","$scope":{}},"date":{"$date":{"$numberLong":"1721485800000"}}}

Puede leer una string JSON extendida en el valor de JavaScript u objeto descrito por la string utilizando el método EJSON.parse().

El siguiente ejemplo muestra cómo puedes leer una cadena JSON extendida en un valor u objeto de JavaScript utilizando el método parse():

import { BSON } from 'mongodb';
const EJSON = BSON.EJSON;
const ejsonStr = `{
"foo": [
{ "$numberInt": "1" },
{ "$numberInt": "2" }
],
"bar": { "hello": "world" },
"code": {
"$code": "function x() { return 1; }",
"$scope": {}
},
"bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } }
}`;
const doc = EJSON.parse(ejsonStr);
console.log(doc);
{
foo: [ 1, 2 ],
bar: { hello: 'world' },
code: new Code('function x() { return 1; }', {}),
bin: Binary.createFromBase64('AQIDBA==', 0)
}

Nota

El controlador analiza el tipo $uuid Extended JSON de un string a un objeto BsonBinary de subtipo binario 4. Para más información sobre el análisis del campo $uuid, consultar la sección Reglas especiales para el análisis de campos $uuid en la especificación extendida de JSON.

Para aprender más sobre cualquiera de los métodos o tipos discutidos en esta guía, consulta la EJSON Documentación de la API.