Definición
$deserializeEJSONNovedad 8.3 en la versión.:
Convierte el formato Extended JSON (EJSON) en valores BSON nativos. Puedes usar esta expresión para transformar los envoltorios del 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 sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban 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.