Definição
Mescle uma array de documentos em um único documento.
Observação
Desambiguação
Esta página descreve $mergeObjects quando usada como uma expressão, que mescla uma array de documentos.
Você também pode usar o $mergeObjects (accumulator), que retorna um documento mesclado em um grupo de documentos de entrada.
Sintaxe
Quando utilizado como uma expressão, $mergeObjects tem esta sintaxe:
{ $mergeObjects: <expression> }
O operando <expression> pode ser:
Uma única expressão que avalia para uma array de documentos para mesclar. Por exemplo ,
$blogPostsonde o campo de documentoblogPostscontém uma array de documentos.Uma array de expressões, cada uma das quais avalia para um documento. Por exemplo ,
[ "$doc1", "$doc2", "$doc3" ]onde cada campo de documento contém um único documento.
Comportamento
$mergeObjects ignora valores de entrada null. Se todos os valores de entrada forem null, $mergeObjects retornará um documento vazio { }.
$mergeObjects substitui os valores dos campo à medida que mescla documentos. Se vários documentos de entrada contiverem o mesmo nome de campo , a saída conterá o valor do último documento de entrada que contém o campo conflitante.
Exemplo | Resultados | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| | ||||||||
| | ||||||||
| | ||||||||
| |
Exemplo
Os exemplos nesta página usam dados do conjunto de dados sample_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 pipeline a seguir usa $mergeObjects em $replaceWith para mesclar os subdocumentos imdb e tomatoes.critic de cada filme em um único documentoratings. Ambos os subdocumentos contêm um camporating , portanto, $mergeObjects substitui a classificação imdb pela classificação tomatoes.critic. Campos exclusivos de cada subdocumento são preservados no resultado.
db.movies.aggregate( [ { $match: { genres: "Action", year: 2010, "imdb.rating": { $exists: true }, "tomatoes.critic.rating": { $exists: true } } }, { $sort: { title: 1 } }, { $limit: 5 }, { $replaceWith: { title: "$title", year: "$year", ratings: { $mergeObjects: [ "$imdb", "$tomatoes.critic" ] } } } ] )
No pipeline anterior:
$matchfiltra para filmes de ação de 2010 comimdb.ratingetomatoes.critic.ratingexistentes.$sortclassifica documentos alfabeticamente portitle.$limitrestringe a saída para documentos 5 para melhorar a legibilidade.$replaceWithutiliza$mergeObjectspara mesclar$imdbe$tomatoes.criticem um camporatings.Como ambos os subdocumentos contêm um campo
rating,$mergeObjectsusa o valor detomatoes.critic(o último argumento).Os campos exclusivos
voteseiddeimdb, enumReviewsemeterdetomatoes.critic, estão todos preservados.