Menu Docs
Página inicial do Docs
/ /

$deserializeEJSON (operador de expressão )

$deserializeEJSON

Novidades 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 $convert com.

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

$deserializeEJSON obtém um documento com os seguintes campos:

Campo
Tipo
necessidade
Descrição

input

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.

onError

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.

$deserializeEJSON converte wrappers de tipo JSON estendido em seus tipos BSON correspondentes:

Wrapper de tipo JSON estendido
Tipo de JSON
Exemplo

{"$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"}

Data

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

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

Data

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

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

Binário

BinData(0, "AQIDBA==")

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

Expressão regular

/abc/i

Se o valor input for nulo ou estiver ausente, $deserializeEJSON retornará nulo.

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.

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" ]
}
}

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
}
}

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
}
}

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" }
}
}
}
}
])
  • $serializeEJSON

  • $convert

  • $toString

  • O MongoDB Shell fornece métodos integrados para ajudar a trabalhar com Extended JSON. Para saber mais, consulte EJSON.

Voltar

$derivative

Nesta página