Importante
Desambiguación
La siguiente página analiza MongoDB Extended JSON v1 (Legacy extended JSON). Para discutir sobre MongoDB Extended JSON v2, consulte JSON extendido de MongoDB (v2).
Para los tipos de datos admitidos en mongo, consulta Tipos de datos en mongosh.
JSON solo puede representar un subconjunto de los tipos admitidos por BSON. Para preservar la información de tipo, MongoDB agrega las siguientes extensiones al formato JSON:
Modo estricto. Las representaciones en modo estricto de los tipos BSON cumplen con la RFC de JSON.. Cualquier analizador JSON puede analizar estas representaciones en modo estricto como pares clave/valor; sin embargo, solo el analizador JSON interno de MongoDB reconoce la información de tipo transmitida por el formato.
mongoModo Shell. El analizador interno de JSON de MongoDB y elmongoshell pueden analizar esta moda.
La representación utilizada para los distintos tipos de datos depende del contexto en el que se analiza el JSON.
MongoDB Extended JSON v1 y MongoDB Drivers
Los siguientes drivers admiten Extended JSON v1.0 (heredado/heredada):
C#
Ruby
Nota
El Driver de C# 3.0 y posteriores no tienen soporte para el modo estricto, pero sí para el modo shell.
Para los otros controladores, consulta MongoDB Extended JSON (v2).
Analizadores y formatos admitidos
Entrada en modo estricto
Lo siguiente puede analizar representaciones en modo estricto con reconocimiento de la información de tipo.
mongoimportversión 4.0 y anteriores--queryopción de varias herramientas de MongoDB
Otros analizadores de JSON, incluido el mongo shell, pueden analizar representaciones en modo estricto como pares clave/valor, pero sin reconocimiento de la información de tipo.
Entrada en el Shell de mongo
Los siguientes pueden analizar representaciones en el modo shell de mongo con reconocimiento de la información del tipo.
mongoimportversión 4.0 y anteriores--queryopción de varias herramientas de MongoDBmongoShell
Salida en modo estricto
Antes de la versión 4.2, mongoexport entrega datos en modo estricto de MongoDB Extended JSON v1.
Salida en modo Shell de mongo
Antes de la versión 4.2, bsondump se mostraba en mongo modo shell.
Tipos de datos BSON y sus representaciones asociadas
Lo siguiente presenta los tipos de datos BSON y las representaciones asociadas en modo estricto y en modo shell mongo.
Binario
data_binary- Modo estricto
mongoModo Shell{ "$binary": "<bindata>", "$type": "<t>" } BinData ( <t>, <bindata> )
Donde los valores son los siguientes:
<bindata>es la representación base64 de una string binaria.<t>es una representación de un solo byte que indica el tipo de dato. En modo estricto es una cadena hexadecimal y en Shell es un número entero. Consulta la documentación extendida de bson. http://bsonspec.org/spec.html
fecha
data_date- Modo estricto
mongoModo Shell{ "$date": "<date>" } new Date ( <date> ) En Modo estricto,
<date>es un formato de fecha ISO-8601 con un campo obligatorio de zona horaria siguiendo la plantillaYYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>.En Shell modo,
<date>es la representación en JSON de un entero con signo de 64bits que indica el número de milisegundos transcurridos desde la Unix epoch UTC.
Marca de tiempo
data_timestamp- Modo estricto
mongoModo Shell{ "$timestamp": { "t": <t>, "i": <i> } } Timestamp( <t>, <i> )
Donde los valores son los siguientes:
<t>es la representación JSON de un entero sin signo de 32bits para segundos desde la Unix epoch.<i>es un entero sin signo de 32bits para el incremento.
Expresión regular
data_regex- Modo estricto
mongoModo Shell{ "$regex": "<sRegex>", "$options": "<sOptions>" } /<jRegex>/<jOptions>
Donde los valores son los siguientes:
<sRegex>es un string de caracteres JSON válidos.<jRegex>es un string que puede contener caracteres JSON válidos y caracteres de comillas double sin escapar ("), pero no puede contener caracteres de barra diagonal sin escapar (/).<sOptions>es un string que contiene las opciones de la expresión regular representadas por las letras del alfabeto.<jOptions>es una string que puede contener sólo los caracteres 'g', 'i', 'm' y 's' (añadido en v1.9). Debido a que las representacionesJavaScriptymongo Shellsoportan un rango limitado de opciones, cualquier opción que no cumpla con este estándar será descartada al convertir a esta representación.
OID
data_oid- Modo estricto
mongoModo Shell{ "$oid": "<id>" } ObjectId( "<id>" )
Donde los valores son los siguientes:
<id>es una cadena hexadecimal de 24caracteres.
Referencia de base de datos
data_ref- Modo estricto
mongoModo Shell{ "$ref": "<name>", "$id": "<id>" } DBRef("<name>", "<id>")
Donde los valores son los siguientes:
<name>es un string de caracteres JSON válidos.<id>es cualquier tipo de JSON válido extendido.
Tipo indefinido
data_undefined- Modo estricto
mongoModo Shell{ "$undefined": true } undefined La representación para el tipo indefinido de JavaScript/BSON.
No se puede usar
undefineden documentos de consulta. Considere el siguiente documento insertado en lapeoplecolección mediante el shellmongoheredado:db.people.insertOne( { name : "Sally", age : undefined } ) Las siguientes consultas devuelven un error:
db.people.find( { age : undefined } ) db.people.find( { age : { $gte : undefined } } ) Sin embargo, puedes consultar valores no definidos usando, como
$typeen:db.people.find( { age : { $type : 6 } } ) Esta query devuelve todos los documentos en los que el campo
agetiene el valorundefined.Importante
El tipo BSON no definido es obsoleto.
mongoshalmacena un valor nulo en su lugar.Por ejemplo, utiliza el mismo código para insertar un documento en
mongoshy en lamongoshell heredada:db.people.insertOne( { name : "Sally", age : undefined } ) Los documentos resultantes son diferentes:
{ "name" : "Sally", "age" : null } { "name" : "Sally", "age" : undefined }
MinKey
data_minkey- Modo estricto
mongoModo Shell{ "$minKey": 1 } MinKey Representación del tipo de dato BSON de MinKey que se compara con valores inferiores a los de los demás tipos.Consulte Comparación/Orden de ordenación para obtener más información sobre el orden de comparación de los tipos BSON.
Clave máxima
data_maxkey- Modo estricto
mongoModo Shell{ "$maxKey": 1 } MaxKey Representación del tipo de dato MaxKey BSON que se compara mejor que todos los demás tipos.Consulte Comparación/Orden de ordenación para obtener más información sobre el orden de comparación de los tipos BSON.
Número largo
data_numberlong- Modo estricto
mongoModo Shell{ "$numberLong": "<number>" } Long( "<number>" ) NumberLongEs un entero con signo de 64 bits. En elmongoshell heredado, debe usar comillas para insertar un; de lo contrario,NumberLongla operación producirá un error.Por ejemplo, los siguientes comandos intentan insertar
9223372036854775807como unNumberLongcon y sin comillas alrededor del valor entero:db.json.insertOne( { longQuoted : Long("9223372036854775807") } ) db.json.insertOne( { longUnQuoted : Long(9223372036854775807) } ) La línea resaltada produce un error en el
mongoshell heredado. La inserción se realiza con éxito enmongosh.
NumberDecimal
data_numberdecimal- Modo estricto
mongoModo Shell{ "$numberDecimal": "<number>" } Decimal128( "<number>" ) NumberDecimalEs un decimal de alta precisión. Debe incluir comillas; de lo contrario, el número de entrada se considerará doble, lo que provocará pérdida de datos.Por ejemplo, los siguientes comandos insertan
123.40como unNumberDecimalcon y sin comillas alrededor del valor:db.json.insertOne( { decimalQuoted : Decimal128("123.40") } ) db.json.insertOne( { decimalUnQuoted : Decimal128(123.40) } ) Al recuperar los documentos, el valor de
decimalUnQuotedha cambiado, mientras quedecimalQuotedmantiene su precisión especificada:db.json.find() { "_id" : ObjectId("596f88b7b613bb04f80a1ea9"), "decimalQuoted" : Decimal128("123.40") } { "_id" : ObjectId("596f88c9b613bb04f80a1eaa"), "decimalUnQuoted" : Decimal128("123.400000000000") } Importante
Este comportamiento de inserción es diferente en
mongosh.El formato de cadena sin comillas,
Decimal128(123.40), no está recomendado. La inserción se realizó correctamente, pero también generó una advertencia.El formato de cadena entre comillas,
Decimal128.fromStringWithRounding("123.40"), almacena el valor como123.4. El0final se descarta.