Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Trabajar con datos JSON ampliados

JSON es un formato de datos que representa los valores de objetos, matrices, números, cadenas, valores booleanos y nulos. El formato JSON extendido define un conjunto reservado de claves con el prefijo "$" para representar 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 ofrece diferentes formatos de cadena para representar datos BSON. Cada formato cumple con la RFC de JSON y satisface casos de uso específicos. El formato Extendido, también conocido como formato Canónico, ofrece representaciones específicas para cada tipo de BSON, lo que permite una conversión bidireccional sin pérdida de información. El formato de Modo Relajado es más conciso y similar al JSON convencional, pero no representa toda la información de tipo, como el ancho de bits específico de los campos numéricos.

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

Nombre
Descripción

Extendido

Also known as the Canonical format, this JSON representation avoids loss of BSON type information.
This format prioritizes type preservation at the loss of human-readability and interoperability with older formats.

Modo Relajado

JSON representation that describes BSON documents with some type information loss.
This format prioritizes human-readability and interoperability at the loss of certain type information.

Para obtener más información sobre JSON, BSON y JSON extendido, consulte 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 cadena JSON extendida en 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 generar JSON extendido en formato canónico:

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 $uuid tipo JSON extendido de una cadena a un BsonBinary objeto de subtipo 4 binario. Para obtener más información sobre el $uuid análisis del campo, consulte la sección "Reglas especiales para el análisis de campos $uuid" en la especificación JSON extendida.

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.

Volver

Validación UTF-8

En esta página