Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

JSON extendido de MongoDB (v1)

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 mongosee Tipos de datos de 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:

La representación utilizada para los diferentes tipos de datos depende del contexto en el que se analice el JSON.

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

Lo siguiente puede analizar representaciones en modo estricto con reconocimiento de la información de tipo.

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.

Los siguientes pueden analizar representaciones en el modo shell de mongo con reconocimiento de la información del tipo.

  • mongoimport versión 4.0 y anteriores

  • --query opción de varias herramientas de MongoDB

  • mongo Shell

Antes de la versión 4.2, mongoexport entrega datos en modo estricto de MongoDB Extended JSON v1.

Antes de la versión 4.2, bsondump se mostraba en mongo modo shell.

Lo siguiente presenta los tipos de datos BSON y las representaciones asociadas en modo estricto y en modo shell mongo.

data_binary
Modo estricto
mongo Modo 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

data_date
Modo estricto
mongo Modo 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 plantilla YYYY-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.

data_timestamp
Modo estricto
mongo Modo 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.

data_regex
Modo estricto
mongo Modo 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 representaciones JavaScript y mongo Shell soportan un rango limitado de opciones, cualquier opción que no cumpla con este estándar será descartada al convertir a esta representación.

data_oid
Modo estricto
mongo Modo Shell
{ "$oid": "<id>" }
ObjectId( "<id>" )

Donde los valores son los siguientes:

  • <id> es una cadena hexadecimal de 24caracteres.

data_ref
Modo estricto
mongo Modo 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.

data_undefined
Modo estricto
mongo Modo Shell
{ "$undefined": true }
undefined

La representación para el tipo indefinido de JavaScript/BSON.

No puedes usar undefined en documentos de query. Considera el siguiente documento insertado en la colección people usando el shell heredado mongo:

db.people.insertOne( { name : "Sally", age : undefined } )

Las siguientes consultas generan un error:

db.people.find( { age : undefined } )
db.people.find( { age : { $gte : undefined } } )

Sin embargo, puede query valores no definidos utilizando $type, como en:

db.people.find( { age : { $type : 6 } } )

Esta query devuelve todos los documentos en los que el campo age tiene el valor undefined.

Importante

El tipo BSON no definido es obsoleto. mongosh almacena un valor nulo en su lugar.

Por ejemplo, utiliza el mismo código para insertar un documento en mongosh y en la mongo shell heredada:

db.people.insertOne( { name : "Sally", age : undefined } )

Los documentos resultantes son diferentes:

{ "name" : "Sally", "age" : null }
{ "name" : "Sally", "age" : undefined }
data_minkey
Modo estricto
mongo Modo Shell
{ "$minKey": 1 }
MinKey

La representación del tipo de dato BSON MinKey que se compara por debajo de todos los demás tipos. Consulta Comparación/Orden de Clasificación para obtener más información sobre el orden de comparación para los BSON types.

data_maxkey
Modo estricto
mongo Modo Shell
{ "$maxKey": 1 }
MaxKey

La representación del tipo de dato BSON MaxKey que compara más alto que todos los demás tipos. Consulta Comparación/Orden de Clasificación para obtener más información sobre el orden de comparación para los BSON types.

data_numberlong
Modo estricto
mongo Modo Shell
{ "$numberLong": "<number>" }
Long( "<number>" )

NumberLong es un entero con signo de 64 bits. En la shell mongo legada, es necesario utilizar comillas para insertar un NumberLong o de lo contrario la operación producirá un error.

Por ejemplo, los siguientes comandos intentan insertar 9223372036854775807 como un NumberLong con 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 mongo shell heredado. La inserción se realiza con éxito en mongosh.

data_numberdecimal
Modo estricto
mongo Modo Shell
{ "$numberDecimal": "<number>" }
Decimal128( "<number>" )

NumberDecimal es un decimal de alta precisión. Debe incluir comillas o el número de entrada se tratará como un double, lo que podría provocar la pérdida de datos.

Por ejemplo, los siguientes comandos insertan 123.40 como un NumberDecimal con 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 decimalUnQuoted ha cambiado, mientras que decimalQuoted mantiene 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 como 123.4. El 0 final se descarta.

Volver

JSON extendido (v2)

En esta página