Menu Docs
Página inicial do Docs
/ /

$serializeEJSON (operador de expressão )

$serializeEJSON

Novidades na versão 8.3.

Converte valores BSON para o formato JSON estendido (EJSON). O resultado é um documento BSON com wrappers do tipo EJSON que podem ser convertidos em uma string JSON $toString usando.

{
$serializeEJSON: {
input: <expression>,
relaxed: <boolean>,
onError: <expression>
}
}

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

Campo
Tipo
necessidade
Descrição

input

Expressão

Obrigatório

O valor BSON a ser convertido para o formato JSON estendido.

relaxed

Boolean

Opcional

Especifica se o formato Relaxed Extended JSON deve ser usado.

  • Se true, $serializeEJSON usa o formato JSON estendido relaxado, que representa tipos numéricos (Int32, Int64, double) como números JSON nativos para melhor legibilidade.

  • Se false ou não for especificado, $serializeEJSON usa o formato Canonical Extended JSON, que preserva informações de tipo para todos os tipos de BSON.

Padrão: false

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.

A tabela a seguir mostra como os tipos BSON comuns são convertidos em JSON estendido:

Tipo de JSON
JSON estendido canônico
JSON estendido relaxado

Int32

{"$numberInt": "42"}

42

Int64

{"$numberLong": "42"}

42

Double

{"$numberDouble": "42.5"}

42.5

ObjectId

{"$oid": "507f1f77bcf86cd799439011"}

Igual à Canônica

Data

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

{"$date": "2021-01-01T00:00:00.000Z"}

Binário

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

Igual à Canônica

Expressão regular

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

Igual à Canônica

Se o valor input for nulo ou estiver ausente, $serializeEJSON 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 converte um documento de filme para o formato JSON estendido canônico:

db.movies.aggregate([
{
$match: { title: "Inception" }
},
{
$project: {
ejson: { $serializeEJSON: { input: "$$ROOT" } }
}
}
])
{
_id: ObjectId("573a1398f29313caabcea974"),
ejson: {
_id: { $oid: "573a1398f29313caabcea974" },
title: "Inception",
year: { $numberInt: "2010" },
runtime: { $numberInt: "148" },
released: { $date: { $numberLong: "1279238400000" } },
cast: [
"Leonardo DiCaprio",
"Joseph Gordon-Levitt",
"Ellen Page",
"Tom Hardy"
],
genres: [ "Action", "Sci-Fi", "Thriller" ],
directors: [ "Christopher Nolan" ]
}
}

O exemplo seguinte utiliza a opção relaxed para saída mais legível:

db.movies.aggregate([
{
$match: { title: "Inception" }
},
{
$project: {
ejson: {
$serializeEJSON: {
input: "$$ROOT",
relaxed: true
}
}
}
}
])
{
_id: ObjectId("573a1398f29313caabcea974"),
ejson: {
_id: { $oid: "573a1398f29313caabcea974" },
title: "Inception",
year: 2010,
runtime: 148,
released: { $date: "2010-07-16T00:00:00.000Z" },
cast: [
"Leonardo DiCaprio",
"Joseph Gordon-Levitt",
"Ellen Page",
"Tom Hardy"
],
genres: [ "Action", "Sci-Fi", "Thriller" ],
directors: [ "Christopher Nolan" ]
}
}

Para converter o resultado EJSON em uma string JSON, combine $serializeEJSON $toStringcom:

db.movies.aggregate([
{
$match: { title: "The Godfather" }
},
{
$project: {
title: 1,
jsonString: {
$toString: {
$serializeEJSON: { input: "$$ROOT" }
}
}
}
}
])
[
{
_id: '573a13c5f29313caabd6ee62',
title: 'The Godfather',
jsonString: `{"_id":"573a13c5f29313caabd6ee62",` +
`"fullplot":"When the aging head of a famous crime family decides to transfer his position to one of his subalterns, a series of unfortunate events start happening to the family, and a war begins between all the well-known families leading to insolence, deportation, murder and revenge, and ends with the favorable successor being finally chosen.",` +
`"imdb":{"rating":9.2,"votes":1038358,"id":68646},` +
`"year":1972,` +
`"plot":"The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son.",` +
`"genres":["Crime","Drama"],` +
`"rated":"R",` +
`"metacritic":100,` +
`"title":"The Godfather",` +
`"lastupdated":"2015-09-02 00:08:23.680000000",` +
`"languages":["English","Italian","Latin"],` +
`"writers":["Mario Puzo (screenplay)","Francis Ford Coppola (screenplay)","Mario Puzo (novel)"],` +
`"type":"movie",` +
`"tomatoes":{"website":"http://www.thegodfather.com","viewer":{"rating":4.4,"numReviews":725773,"meter":98},"dvd":{"$date":"2001-10-09T00:00:00.000Z"},"critic":{"rating":9.2,"numReviews":84,"meter":99},"lastUpdated":{"$date":"2015-09-12T17:15:13.000Z"},"consensus":"One of Hollywood's greatest critical and commercial successes, The Godfather gets everything right; not only did the movie transcend expectations, it established new benchmarks for American cinema.","rotten":1,"production":"Paramount Pictures","fresh":83},` +
`"poster":"https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_SY1000_SX677_AL_.jpg",` +
`"num_mflix_comments":131,` +
`"released":{"$date":"1972-03-24T00:00:00.000Z"},` +
`"awards":{"wins":33,"nominations":19,"text":"Won 3 Oscars. Another 30 wins & 19 nominations."},` +
`"countries":["USA"],` +
`"cast":["Marlon Brando","Al Pacino","James Caan","Richard S. Castellano"],` +
`"directors":["Francis Ford Coppola"],` +
`"runtime":175}`
}
]

Observação

O campo jsonString no exemplo anterior foi reformatado para legibilidade. Na saída real, a string JSON é uma única linha sem espaços em branco.

Você pode serializar campos específicos em vez de documentos inteiros:

db.movies.aggregate([
{
$match: { year: { $gte: 2010 } }
},
{
$project: {
title: 1,
metadataEJSON: {
$serializeEJSON: {
input: {
releaseDate: "$released",
runtime: "$runtime",
imdbRating: "$imdb.rating"
}
}
}
}
}
])
[
{
_id: '573a13c5f29313caabd6ee61',
title: 'Inception',
metadataEJSON: {
releaseDate: { '$date': '2010-07-16T00:00:00.000Z' },
runtime: 148,
imdbRating: 8.8
}
}
]

O exemplo seguinte utiliza onError para fornecer um valor de contingência se a serialização falhar:

db.movies.aggregate([
{
$project: {
title: 1,
ejson: {
$serializeEJSON: {
input: "$customField",
onError: { error: "Serialization failed" }
}
}
}
}
])

Voltar

$ segundo

Nesta página