Definición
$deserializeEJSONNuevo en la versión 8.3.
Convierte el formato Extended JSON (EJSON) en valores BSON nativos. Puede utilizar esta expresión para transformar los contenedores de tipo EJSON en sus correspondientes BSON types después de analizar un string JSON con
$convert.
Sintaxis
{ $deserializeEJSON: { input: <expression>, onError: <expression> } }
$deserializeEJSON toma un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| expresión | Requerido | El valor JSON extendido a convertir en formato BSON nativo. Esto debería ser un document BSON que contenga contenedores de tipo EJSON. |
| expresión | Opcional | Valor a devolver si la operación encuentra un error durante la conversión. Si no se especifica, cuando ocurre un error, la operación genera un error y se detiene. |
Comportamiento
Análisis del contenedor de tipo
$deserializeEJSON convierte los contenedores de tipo Extended JSON a sus correspondientes BSON types:
Contenedor de tipo JSON extendido | Tipo BSON | Ejemplo |
|---|---|---|
| Int32 |
|
| Int64 |
|
| Double |
|
| ObjectId |
|
| fecha |
|
| fecha |
|
| Binario |
|
| Expresión regular |
|
Valores nulos y faltantes
Si el valor input es nulo o falta, $deserializeEJSON devolverá null.
Ejemplos
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.
Deserializar Document Extended JSON
El siguiente ejemplo deserializa un documento JSON extendido a BSON types 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" ] } }
Analizar la JSON string y deserializar
El siguiente ejemplo combina $convert con $deserializeEJSON para analizar una JSON string 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 } }
Deserializar campos específicos
Puedes deserializar campos específicos que contienen 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 } }
Use onError para el manejo de errores
El siguiente ejemplo utiliza onError para proporcionar un valor alternativo en caso de que la deserialización falle:
db.data.aggregate([ { $project: { result: { $deserializeEJSON: { input: "$ejsonField", onError: { error: "Invalid EJSON format" } } } } } ])
Obtén más información
La interfaz MongoDB Shell proporciona métodos integrados para ayudar a trabajar con JSON extendido. Para obtener más información, consulte EJSON.