Definição
$deserializeEJSONNovidades na versão 8.3.
Converte o formato Extended JSON (EJSON) em valores BSON nativos. Você pode usar essa expressão para transformar os wrappers de tipo EJSON em seus tipos BSON correspondentes depois de analisar uma string JSON
$convertcom.
Sintaxe
{ $deserializeEJSON: { input: <expression>, onError: <expression> } }
$deserializeEJSON obtém um documento com os seguintes campos:
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| Expressão | Obrigatório | O valor de JSON estendido para converter para o formato BSON nativo. Este deve ser um documento BSON contendo wrappers do tipo EJSON. |
| Expressão | Opcional | Valor a ser retornado se a operação encontrar um erro durante a conversão. Se não for especificado, quando ocorre um erro, a operação gera um erro e é interrompida. |
Comportamento
Análise de wrapper de tipo
$deserializeEJSON converte wrappers de tipo JSON estendido em seus tipos BSON correspondentes:
Wrapper de tipo JSON estendido | Tipo de JSON | Exemplo |
|---|---|---|
| Int32 |
|
| Int64 |
|
| Double |
|
| ObjectId |
|
| Data |
|
| Data |
|
| Binário |
|
| Expressão regular |
|
Valores nulos e ausentes
Se o valor input for nulo ou estiver ausente, $deserializeEJSON retornará nulo.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados de amostrasample_mflix . Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB, consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Deserializar documento JSON estendido
O exemplo a seguir desserializa um documento JSON estendido de volta para 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" ] } }
Analisar string JSON e desserializar
O exemplo a seguir combina $convert com $deserializeEJSON para analisar uma string JSON e converter wrappers do tipo EJSON em 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
Você pode desserializar campos específicos contendo wrappers 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 tratamento de erros
O exemplo seguinte utiliza onError para fornecer um valor de contingência se a desserialização falhar:
db.data.aggregate([ { $project: { result: { $deserializeEJSON: { input: "$ejsonField", onError: { error: "Invalid EJSON format" } } } } } ])
Saiba mais
O MongoDB Shell fornece métodos integrados para ajudar a trabalhar com Extended JSON. Para saber mais, consulte EJSON.