Definición
$deserializeEJSONNuevo 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.
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 que se convertirá al formato BSON nativo. Debe ser un documento BSON que contenga contenedores de tipo EJSON. |
| 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. |
Comportamiento
Análisis de envoltura de tipos
$deserializeEJSON Convierte los envoltorios de tipo JSON extendido a sus tipos BSON correspondientes:
Envoltorio 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 devuelve nulo.
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 documento JSON extendido
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" ] } }
Analizar cadena JSON y deserializar
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 } }
Deserializar campos específicos
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 } }
Utilice onError para el manejo de errores.
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" } } } } } ])
Obtén más información
La consola de MongoDB proporciona métodos integrados para trabajar con JSON extendido. Para obtener más información, consulte EJSON.