Docs Menu
Docs Home
/ /

MongoDB Extended JSON (v2)

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.

Los siguientes controladores tienen soporte para JSON extendido v2.0:

  • C

  • C#

  • C++

  • Go

  • Java

  • Node

  • Perl

  • PHPC

  • Python

  • Ruby

  • Scala

MongoDB proporciona los siguientes métodos para JSON extendido:

Método
Descripción

serialize

Serializa un objeto BSON y devuelve los datos en formato JSON Extendido.

EJSON.serialize( db.<collection>.findOne() )

deserialize

Convierte un documento serializado en pares de campo y valor. Los valores tienen BSON types.

EJSON.deserialize( <serialized object> )

stringify

Convierte los pares de elemento y tipo de un objeto deserializado en strings.

EJSON.stringify( <deserialized object> )

parse

Convierte strings en pares de elemento y tipo.

EJSON.parse( <string> )

Para ejemplos de uso, ve Conversiones de objetos JSON extendido a continuación.

Para obtener más detalles, consulte la documentación de:

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 mongorestore versión 4.2 o posterior que admita el formato JSON2.0 Extendido v (modo canónico o relajado).

En general, utiliza las versiones correspondientes de mongodump y mongorestore. Para restaurar archivos de datos creados con una versión específica de mongodump, utiliza la versión correspondiente de mongorestore.

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 mongoexport y mongoimport deben coincidir. Para importar datos creados desde mongoexport, debes usar la versión correspondiente de mongoimport.

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í.

Array

Canónico
Relajado
[ <elements> ]
<Same as Canonical>

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 [ ].

Binary

Canónico
Relajado
{ "$binary":
{
"base64": "<payload>",
"subType": "<t>"
}
}
<Same as Canonical>

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.

Date

Para fechas entre los años 1970 y 9999, inclusive:

Canónico
Relajado
{"$date": {"$numberLong": "<millis>"}}
{"$date": "<ISO-8601 Date/Time Format>"}

Para fechas anteriores al año 1970 o después del año 9999:

Canónico
Relajado
{"$date": {"$numberLong": "<millis>"}}
<Same as Canonical>

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.

Decimal128

Canónico
Relajado
{ "$numberDecimal": "<number>" }
<Same as Canonical>

Donde los valores son los siguientes:

Document

Canónico
Relajado
{ <content> }
<Same as Canonical>

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 { }.

Double

Para números finitos:

Canónico
Relajado
{"$numberDouble": "<decimal string>" }
<non-integer number>

Para números infinitos o NaN:

Canónico
Relajado
{"$numberDouble": <"Infinity"|"-Infinity"|"NaN"> }
<Same as Canonical>

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.

Int64

Canónico
Relajado
{ "$numberLong": "<number>" }
<integer>

Donde los valores son los siguientes:

  • "<number>"

    • Un entero con signo de 64 bits como string.

  • <integer>

    • Un entero con signo de 64 bits.

Int32

Canónico
Relajado
{ "$numberInt": "<number>" }
<integer>

Donde los valores son los siguientes:

  • "<number>"

    • Un entero con signo de 32 bits como string.

  • <integer>

    • Un entero con signo de 32 bits.

MaxKey

Canónico
Relajado
{ "$maxKey": 1 }
<Same as Canonical>

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.

MinKey

Canónico
Relajado
{ "$minKey": 1 }
<Same as Canonical>

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.

ObjectId

Canónico
Relajado
{ "$oid": "<ObjectId bytes>" }
<Same as Canonical>

Donde los valores son los siguientes:

  • "<ObjectId bytes>"

    • Una string hexadecimal de 24 caracteres en formato big-endian que representa los bytes de ObjectId.

Regular Expression

Canónico
Relajado
{ "$regularExpression":
{
"pattern": "<regexPattern>",
"options": "<options>"
}
}
<Same as Canonical>

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.

Timestamp

Canónico
Relajado
{"$timestamp": {"t": <t>, "i": <i>}}
<Same as Canonical>

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.

Los siguientes ejemplos ilustran el uso de JSON extendido.

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}}

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.

Cree un documento en la colección conversions:

db.conversions.insertOne( { insertDate: new Date() } )

mongosh devuelve un objeto documento:

{
acknowledged: true,
insertedId: ObjectId("61fbaf25671c45f3f5f4074a")
}

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' }
}

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" )
}

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"}
}

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")
}

Volver

Migrar los datos y query no definidos

En esta página