Importante
Desambiguación
La siguiente página analiza MongoDB Extended JSON v2. Para discutir sobre el JSON extendido de MongoDB heredado v1, consulta MongoDB Extended JSON (v1).
Para obtener los tipos de datos admitidos en mongosh, consulte Tipos de datos mongosh.
JSON solo puede representar directamente un subconjunto de los tipos compatibles con BSON. Para preservar la información de tipos, MongoDB agrega las siguientes extensiones al formato JSON.
- Modo Canónico
- Un formato de string que enfatiza la preservación del tipo a costa de la legibilidad y la interoperabilidad. Es decir, la conversión de canónico a BSON generalmente preserva la información de tipo, excepto en ciertos casos específicos.
- Modo Relajado
- Un formato de string que enfatiza la legibilidad y la interoperabilidad a costa de la preservación de tipos. Es decir, la conversión del formato relajado a BSON puede perder información sobre el tipo de datos.
Ambos formatos están conformados por el JSON RFC y pueden ser analizados por los distintos controladores y herramientas de MongoDB.
Uso de MongoDB Extended JSON v2
Controladores
Los siguientes controladores tienen soporte para JSON extendido v2.0:
|
|
|
Métodos JSON extendidos
MongoDB proporciona los siguientes métodos para JSON extendido:
Método | Descripción | ||
|---|---|---|---|
| Serializa un objeto BSON y devuelve los datos en formato JSON Extendido. | ||
| Convierte un documento serializado en pares de campo y valor. Los valores tienen BSON types. | ||
| Convierte los pares de elemento y tipo de un objeto deserializado en strings. | ||
| Convierte strings en pares de elemento y tipo. |
Para ejemplos de uso, ve Conversiones de objetos JSON extendido a continuación.
Para obtener más detalles, consulte la documentación de:
MongoDB Database Tools
A partir de la versión 4.2:
Binario | Cambios |
|---|---|
Utiliza el formato Extended JSON v2.0 (modo canónico). | |
Utiliza JSON Extendido v2.0 (Modo canónico) formato para los metadatos. Requiere En general, utiliza las versiones correspondientes de | |
Crea datos de salida en Extended JSON v2.0 (modo relajado) por defecto. Crea datos de salida en JSON extendido v2.0 (modo canónico) si se utiliza con | |
Se espera que los datos de importación estén en Extended JSON v2.0 (ya sea en modo relajado o modo canónico) por defecto. Puede reconocer datos que están en formato Extended JSON v1.0 si se especifica la opción En general, las versiones de |
Tipos de datos BSON y sus representaciones asociadas
A continuación, se presentan algunos tipos de datos BSON comunes y las representaciones asociadas en Canónico y Relajado.
La lista completa está aquí.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los elementos del arreglo son los siguientes:
<elements>Los elementos del arreglo utilizan JSON extendido.
Para especificar un arreglo vacío, omita el contenido
[ ].
Canónico | Relajado | |||||||
|---|---|---|---|---|---|---|---|---|
| |
Donde los valores son los siguientes:
"<payload>"- String de carga útil codificada en Base64 (con relleno como "=").
"<t>"- Un string hexadecimal de uno o dos caracteres que corresponde a un subtipo binario de BSON. Consulta la documentación extendida de BSON http://bsonspec.org/spec.html para los subtipos disponibles.
Para fechas entre los años 1970 y 9999, inclusive:
Canónico | Relajado | ||
|---|---|---|---|
| |
Para fechas anteriores al año 1970 o después del año 9999:
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
"<millis>"- Un entero con signo de 64 bits como string. El valor representa los milisegundos en relación con el Unix epoch.
"<ISO-8601 Date/Time Format>"Una fecha en formato de fecha/hora de Internet ISO-8601 como string.
La fecha/hora tiene una precisión máxima de tiempo de milisegundos:
Los segundos fraccionarios tienen exactamente 3 lugares decimales si la parte fraccionaria no es cero.
De lo contrario, los segundos fraccionarios DEBERÍAN omitirse si son cero.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
"<number>"- Un decimal de alta precisión como string.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde el contenido del documento es el siguiente:
<content>Nombre: pares de valor que utilizan JSON extendido.
Para especificar un documento vacío, omita el contenido
{ }.
Para números finitos:
Canónico | Relajado | ||
|---|---|---|---|
| |
Para números infinitos o NaN:
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
"<decimal string>"- Un número de punto flotante con signo de 64 bits como string.
<non-integer number>- Un número no entero. Los números enteros se interpretan como un entero en lugar de un doble.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
"<number>"- Un entero con signo de 64 bits como string.
<integer>- Un entero con signo de 64 bits.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
"<number>"- Un entero con signo de 32 bits como string.
<integer>- Un entero con signo de 32 bits.
Canónico | Relajado | ||
|---|---|---|---|
| |
El tipo de dato MaxKey de BSON se considera mayor que todos los demás tipos. Consulte Comparación/Orden de clasificación para obtener más información sobre el orden de comparación para los BSON types.
Canónico | Relajado | ||
|---|---|---|---|
| |
El tipo de dato MinKey de BSON se considera menor que todos los demás tipos. Consulte Comparación/Orden de clasificación para obtener más información sobre el orden de comparación para los BSON types.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
"<ObjectId bytes>"- Una string hexadecimal de 24 caracteres en formato big-endian que representa los bytes de ObjectId.
Canónico | Relajado | |||||||
|---|---|---|---|---|---|---|---|---|
| |
Donde los valores son los siguientes:
"<regexPattern>"- Una string que corresponde al patrón de expresión regular. La string puede contener caracteres JSON válidos y comillas dobles no escapadas (
"), pero no puede contener caracteres de barra inclinada no escapada (/).
"<options>"- Un string que especifica las opciones de expresión regular BSON. Debe especificar las opciones en orden alfabético. Para obtener información sobre las opciones compatibles, consulte
$options.
Canónico | Relajado | ||
|---|---|---|---|
| |
Donde los valores son los siguientes:
<t>- Un número entero positivo para los segundos desde la epoch.
<i>- Un número entero positivo para el incremento.
Ejemplos
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
Los siguientes ejemplos ilustran el uso de JSON extendido.
Representaciones de tipos
Nombre de campo de ejemplo | Formato canónico | Formato relajado |
|---|---|---|
"_id": | {"$oid":"5d505646cf6d4fe581014ab2"} | {"$oid":"5d505646cf6d4fe581014ab2"} |
"arrayField": | ["hola",{"$numberInt":"10"}] | ["hello",10] |
"campo de fecha": | {"$date":{"$numberLong":"1565546054692"}} | {"$date":"2019-08-11T17:54:14.692Z"} |
"dateBefore1970": | {"$date":{"$numberLong":"-1577923200000"}} | {"$date":{"$numberLong":"-1577923200000"}} |
"decimal128Field": | {"$numberDecimal":"10.99"} | {"$numberDecimal":"10.99"} |
"documentField": | {"a":"hello"} | {"a":"hello"} |
"doubleField": | {"$numberDouble":"10,5"} | 10.5 |
"númeroInfinito" | {"$numberDouble":"Infinity"} | {"$numberDouble":"Infinity"} |
"int32field": | {"$numberInt":"10"} | 10 |
"int64Field": | {"$numberLong":"50"} | 50 |
"minKeyField": | {"$minKey":1} | {"$minKey":1} |
"maxKeyField": | {"$maxKey":1} | {"$maxKey":1} |
"regexField": | {"$regularExpression":{"pattern":"^H","options":"i"}} | {"$regularExpression":{"pattern":"^H","options":"i"}} |
"timestampField": | {“$timestamp”:{“t”:1565545664,“i”:1}} | {“$timestamp”:{“t”:1565545664,“i”:1}} |
"uuid": | {"$uuid":"3b241101-e2bb-4255-8caf-4136c566a962"} | {"$uuid":"3b241101-e2bb-4255-8caf-4136c566a962"} |
Conversiones de objetos JSON extendidos
Los siguientes ejemplos breves recuperan un objeto de documento y luego convierten el objeto a diferentes formas usando métodos de conversión de objetos JSON extendidos.
EJSON.serialize
Serialice los datos almacenados en un objeto de documento MongoDB. mongosh analiza un objeto JavaScript y devuelve valores usando "$" -tipos:
serialized = EJSON.serialize( db.comments.find( {}, { _id: 1, date: 1 } ).sort( { _id: 1 } ).limit(1).next() )
{ _id: { '$oid': '5a9427648b0beebeb69579e7' }, date: { '$date': '2002-08-18T04:56:07.000Z' } }
EJSON.deserialize
Deserializa un objeto serializado. mongosh analiza un objeto JavaScript y devuelve valores utilizando el mongosh tipo predeterminado:
EJSON.deserialize( serialized )
{ _id: ObjectId('5a9427648b0beebeb69579e7'), date: ISODate('2002-08-18T04:56:07.000Z') }
EJSON.stringify
Convierta un objeto en una string. mongosh muestra los elementos del objeto convertido como cadenas:
stringified = EJSON.stringify( db.comments.find( {}, { _id: 1, date: 1 } ).sort( { _id: 1 } ).limit(1).next() )
{"_id":{"$oid":"5a9427648b0beebeb69579e7"},"date":{"$date":"2002-08-18T04:56:07.000Z"}}
EJSON.parse
Analiza una string para crear un objeto. mongosh devuelve los strings convertidos como documentos:
EJSON.parse( stringified )
{ _id: ObjectId('5a9427648b0beebeb69579e7'), date: ISODate('2002-08-18T04:56:07.000Z') }