Importante
Desambiguación
La siguiente página describe MongoDB Extended JSON v2. Para obtener información sobre la versión anterior de MongoDB Extended JSON v1, consulte JSON extendido de MongoDB (v1).
Para los tipos de datos admitidos en mongosh, consulte Tipos de datos de 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 preservará 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 cumplen con el JSON RFC y puede ser analizado 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). | |
Utilice el formato JSON Extendido v (modo canónico) para los metadatos. Requiere la2.0 En general, utiliza las versiones correspondientes de | |
Creates output data in Extended JSON v2.0 (Relaxed mode) by
default. Creates output data in Extended JSON v2.0 (Canonical mode) if
used with --jsonFormat. | |
Expects import data to be in Extended JSON v2.0 (either
Relaxed or Canonical mode) by default. Can recognize data that is in Extended JSON v1.0 format if the option
--legacy is specified.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 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"} |
"campo de matriz": | ["hola",{"$numberInt":"10"}] | ["hello",10] |
"CampoFecha": | {"$date":{"$numberLong":"1565546054692"}} | {"$date":"2019-08-11T17:54:14.692Z"} |
"fecha anterior a1970": | {"$date":{"$numberLong":"-1577923200000"}} | {"$date":{"$numberLong":"-1577923200000"}} |
"Campo128decimal": | {"$numberDecimal":"10.99"} | {"$numberDecimal":"10.99"} |
"campodocumento": | {"a":"hola"} | {"a":"hola"} |
"doble campo": | {"$numberDouble":"10.5"} | 10.5 |
"Número infinito" | {"$numberDouble":"Infinito"} | {"$numberDouble":"Infinito"} |
"campo int32": | {"$numberInt":"10"} | 10 |
"int64Campo": | {"$numberLong":"50"} | 50 |
"minKeyField": | {"$minKey":1} | {"$minKey":1} |
"maxKeyField": | {"$maxKey":1} | {"$maxKey":1} |
"campo de expresión regular": | {"$regularExpression":{"patrón":"^H","opciones":"i"}} | {"$regularExpression":{"patrón":"^H","opciones":"i"}} |
"campo de marca de tiempo": | {"$timestamp":{"t":1565545664,"i":1}} | {"$timestamp":{"t":1565545664,"i":1}} |
Conversiones de objetos JSON extendidos
Los siguientes ejemplos breves crean un objeto de documento y luego convierten el objeto a diferentes formas utilizando métodos de conversión de objetos JSON extendidos.
Configuración
Cree un documento en la colección conversions:
db.conversions.insertOne( { insertDate: new Date() } )
mongosh devuelve un objeto documento:
{ acknowledged: true, insertedId: ObjectId("61fbaf25671c45f3f5f4074a") }
EJSON.serialize
Serialice los datos almacenados en un objeto de documento de MongoDB:
serialized = EJSON.serialize( db.conversions.findOne() )
mongosh analiza un objeto JavaScript y devuelve valores usando "$" tipos prefijados:
{ _id: { '$oid': '61fbaf25671c45f3f5f4074a' }, insertDate: { '$date': '2022-02-03T10:32:05.230Z' } }
EJSON.deserialize
Deserialice un objeto serializado:
EJSON.deserialize( serialized )
mongosh analiza un objeto JavaScript y devuelve valores utilizando el formulario de tipo mongosh por defecto:
{ _id: new ObjectId( "61fbaf25671c45f3f5f4074a" ), insertDate: ISODate( "2022-02-03T10:32:05.230Z" ) }
EJSON.stringify
Convierta un objeto en un string:
stringified = EJSON.stringify( db.conversions.findOne() )
mongosh muestra los elementos del objeto convertido como cadenas:
{ "_id": {"$oid":"61fbaf25671c45f3f5f4074a"}, "insertDate":{"$date":"2022-02-03T10:32:05.230Z"} }
EJSON.parse
Analiza un string para crear un objeto:
EJSON.parse( stringified )
mongosh devuelve las cadenas convertidas como documentos:
{ _id: new ObjectId("61fbaf25671c45f3f5f4074a"), insertDate: ISODate("2022-02-03T10:32:05.230Z") }