Importante
Desambiguación
La siguiente página describe MongoDB Extended JSON v1 (JSON extendido heredado). Para más información sobre MongoDB Extended JSON v2, consulte JSON extendido de MongoDB (v2).
Para los tipos de datos admitidos en mongo, ver
Tipos de datos de mongosh.
JSON solo puede representar un subconjunto de los tipos admitidos por BSON. Para preservar la información de tipos, MongoDB añade 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 de 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 controladores MongoDB
Los siguientes controladores admiten JSON extendido v1.0 (heredado):
C#
Ruby
Nota
El controlador C# 3.0 y posteriores no admiten el modo estricto pero sí 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 MongoDB
Otros analizadores JSON, incluido el shell, pueden analizar representaciones de mongo modo estricto como pares clave/valor, pero sin reconocer la información de tipo.
Entrada en mongo modo Shell
Lo siguiente puede analizar representaciones en mongo modo shell con reconocimiento de la información de tipo.
mongoimportversión 4.0 y anteriores--queryOpción de varias herramientas MongoDBmongoShell
Salida en modo estricto
Antes de la 4.2 versión, genera datos en modo estricto de MongoDB Extendedmongoexport JSON1 v.
Salida en mongo modo Shell
Antes de la 4.2 versión, generaba salidabsondump en mongo modo shell.
Tipos de datos BSON y sus representaciones asociadas
A continuación se presentan los tipos de datos BSON y las representaciones asociadas en modo estricto y 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 cadena 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 modo Shell, un entero. Consulte 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 un8601 formato de fecha ISO- con un campo de zona horaria obligatorio después de laYYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>plantilla.En el modo Shell,
<date>es la representación JSON de un 64entero con signo de bit que indica la cantidad de milisegundos desde la época 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 los segundos desde la época.<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 una cadena de caracteres JSON válidos.<jRegex>es una cadena que puede contener caracteres JSON válidos y caracteres de comillas dobles sin escape ("), pero no puede contener caracteres de barra diagonal sin escape (/).<sOptions>es una cadena que contiene las opciones de expresiones regulares representadas por las letras del alfabeto.<jOptions>Es una cadena que solo puede contener los caracteres «g», «i», «m» y «s» (añadidos en v1.9). Dado que las representacionesJavaScriptymongo Shelladmiten un rango limitado de opciones, cualquier opción no conforme se descartará al convertir a esta representación.
Identificador de origen
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 una cadena de caracteres JSON válidos.<id>es cualquier tipo JSON extendido válido.
Tipo indefinido
data_undefined- Modo estricto
mongoModo Shell{ "$undefined": true } undefined La representación del 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 consulta devuelve todos los documentos para los cuales el campo
agetiene el valorundefined.Importante
El tipo BSON indefinido está obsoleto. almacena un valor nulo en su
mongoshlugar.Por ejemplo, use el mismo código para insertar un documento en y
mongoshmongoen el shell heredado: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.
MaxKey
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 64 entero con signo de bits. En elmongoshell, debe usar comillas para insertar un; de lo contrario,NumberLongla operación generará un error.Por ejemplo, los siguientes comandos intentan insertar
9223372036854775807comoNumberLongcon 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 shell heredado. La inserción se realiza
mongocorrectamentemongoshen.
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.40comoNumberDecimalcon 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 quedecimalQuotedconserva 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
mongoshen.El formato de cadena sin comillas,
Decimal128(123.40), está obsoleto. La inserción se realiza correctamente, pero también genera una advertencia.El formato de cadena entre comillas
Decimal128.fromStringWithRounding("123.40")almacena el valor como123.4. Se omite el0final.