Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

MongoDB Extended JSON (v2)

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.

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

  • C

  • C#

  • C++

  • Go

  • Java

  • Kotlin

  • 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).

Utiliza JSON Extendido v2.0 (Modo canónico) formato para los metadatos. Requiere mongorestore versión 4.2 o posterior que soporte Extended JSON v2.0 Formato (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.

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

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

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

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

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.

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

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

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

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