Docs Menu
Docs Home
/ /

$deserializeEJSON (operador de expresión)

$deserializeEJSON

Nuevo en la versión 8.3.

Convierte el formato JSON extendido (EJSON) a valores BSON nativos. Puede usar esta expresión para transformar los contenedores de tipo EJSON en sus tipos BSON correspondientes después de analizar una cadena JSON con $convert.

{
$deserializeEJSON: {
input: <expression>,
onError: <expression>
}
}

$deserializeEJSON toma un documento con los siguientes campos:

Campo
Tipo
Necesidad
Descripción

input

expresión

Requerido

El valor JSON extendido que se convertirá al formato BSON nativo. Debe ser un documento BSON que contenga contenedores de tipo EJSON.

onError

expresión

Opcional

Valor que se devolverá si la operación encuentra un error durante la conversión.

Si no se especifica, cuando se produce un error, la operación genera un error y se detiene.

$deserializeEJSON Convierte los envoltorios de tipo JSON extendido a sus tipos BSON correspondientes:

Envoltorio de tipo JSON extendido
Tipo BSON
Ejemplo

{"$numberInt": "42"}

Int32

42

{"$numberLong": "42"}

Int64

NumberLong(42)

{"$numberDouble": "42.5"}

Double

42.5

{"$oid": "507f1f77bcf86cd799439011"}

ObjectId

ObjectId("507f1f77bcf86cd799439011")

{"$date": "2021-01-01T00:00:00.000Z"}

fecha

ISODate("2021-01-01T00:00:00.000Z")

{"$date": {"$numberLong": "1609459200000"}}

fecha

ISODate("2021-01-01T00:00:00.000Z")

{"$binary": {"base64": "AQIDBA==", "subType": "00"}}

Binario

BinData(0, "AQIDBA==")

{"$regularExpression": {"pattern": "abc", "options": "i"}}

Expresión regular

/abc/i

Si el valor input es nulo o falta, $deserializeEJSON devuelve nulo.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra_mflix. Para obtener detalles sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargue el conjunto de datos de muestra. Si realizaste modificaciones en las bases de datos de ejemplo, es posible que necesites descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

El siguiente ejemplo deserializa un documento JSON extendido y lo convierte de nuevo a tipos BSON nativos:

db.movies.aggregate([
{
$match: { title: "Inception" }
},
{
$project: {
original: "$$ROOT",
serialized: { $serializeEJSON: { input: "$$ROOT" } }
}
},
{
$project: {
title: "$original.title",
deserialized: { $deserializeEJSON: { input: "$serialized" } }
}
}
])
{
_id: ObjectId("573a1398f29313caabcea974"),
title: "Inception",
deserialized: {
_id: ObjectId("573a1398f29313caabcea974"),
title: "Inception",
year: 2010,
runtime: 148,
released: ISODate("2010-07-16T00:00:00.000Z"),
cast: [
"Leonardo DiCaprio",
"Joseph Gordon-Levitt",
"Ellen Page",
"Tom Hardy"
],
genres: [ "Action", "Sci-Fi", "Thriller" ],
directors: [ "Christopher Nolan" ]
}
}

El siguiente ejemplo combina $convert con $deserializeEJSON para analizar una cadena JSON y convertir los contenedores de tipo EJSON a BSON:

db.aggregate([
{
$documents: [
{
jsonData: '{"_id":{"$oid":"507f1f77bcf86cd799439011"},' +
'"title":"The Matrix",' +
'"year":{"$numberInt":"1999"},' +
'"rating":{"$numberDouble":"8.7"}}'
}
]
},
{
$project: {
parsed: {
$convert: {
input: "$jsonData",
to: "object"
}
}
}
},
{
$project: {
movie: { $deserializeEJSON: { input: "$parsed" } }
}
}
])
{
_id: ObjectId("..."),
movie: {
_id: ObjectId("507f1f77bcf86cd799439011"),
title: "The Matrix",
year: 1999,
rating: 8.7
}
}

Puede deserializar campos específicos que contengan contenedores de tipo EJSON:

db.movies.aggregate([
{
$match: { title: "Inception" }
},
{
$project: {
title: 1,
serializedMetadata: {
$serializeEJSON: {
input: {
releaseDate: "$released",
runtime: "$runtime",
rating: "$imdb.rating"
}
}
}
}
},
{
$project: {
title: 1,
metadata: { $deserializeEJSON: { input: "$serializedMetadata" } }
}
}
])
{
_id: ObjectId("573a1398f29313caabcea974"),
title: "Inception",
metadata: {
releaseDate: ISODate("2010-07-16T00:00:00.000Z"),
runtime: 148,
rating: 8.8
}
}

El siguiente ejemplo utiliza onError para proporcionar un valor de reserva en caso de que falle la deserialización:

db.data.aggregate([
{
$project: {
result: {
$deserializeEJSON: {
input: "$ejsonField",
onError: { error: "Invalid EJSON format" }
}
}
}
}
])
  • $serializeEJSON

  • $convert

  • $toString

  • La consola de MongoDB proporciona métodos integrados para trabajar con JSON extendido. Para obtener más información, consulte EJSON.

Volver

$derivative

En esta página