Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
BSON Types

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

La representación utilizada para los distintos tipos de datos depende del contexto en el que se analiza 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 se puede usar undefined en documentos de consulta. Considere el siguiente documento insertado en la people colección mediante el shell mongo heredado:

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 $type 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

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.

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

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

NumberLong Es un entero con signo de 64 bits. En el mongo shell heredado, debe usar comillas para insertar un; de lo contrario,NumberLong 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; 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.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