Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Menu Docs

$mergeObjects (operador acumulador )

$mergeObjects

Retorna um documento criado combinando os documentos de entrada de cada grupo.

O acumulador $mergeObjects está disponível nos seguintes estágios:

Observação

Desambiguação

Esta página descreve $mergeObjects quando usado como acumulador. Os acumuladores retornam um valor agregado em um grupo de documentos de entrada.

Você também pode usar $mergeObjects nestes outros contextos:

{ $mergeObjects: <expression> }

O <expression> pode ser qualquer expressão válida que avalia para um documento.

$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.

Crie uma coleção movieReviews:

db.movieReviews.insertMany( [
{
title: "Galactic Odyssey",
source: "filmCritic",
data: { rating: 8.1, votes: 1482903 }
},
{
title: "Galactic Odyssey",
source: "viewerVault",
data: { tomatometer: 79, audienceScore: 85 }
},
{
title: "Neon Horizon",
source: "filmCritic",
data: { rating: 7.4, votes: 983201 }
},
{
title: "Neon Horizon",
source: "viewerVault",
data: { tomatometer: 68, audienceScore: 74 }
},
{
title: "The Last Protocol",
source: "filmCritic",
data: { rating: 8.7, votes: 2104567 }
},
{
title: "The Last Protocol",
source: "viewerVault",
data: { tomatometer: 91, audienceScore: 88 }
}
] )

Cada filme tem dois documentos:

  • Um do filme Critic com os campos rating e votes.

  • Um do viewerVault com os campos tomatometer e audienceScore.

Como os dois documentos de origem têm nomes de campo diferentes, $mergeObjects pode combiná-los em um perfil completo que inclua todos os quatro campos.

O pipeline a seguir usa $mergeObjects em um estágio $group para combinar os dados de revisão de cada fonte em um único documento para cada filme:

db.movieReviews.aggregate( [
{
$group: {
_id: "$title",
allRatings: { $mergeObjects: "$data" }
}
},
{ $sort: { _id: 1 } }
] )

No pipeline anterior:

  • $group agrupa documentos por title e usa $mergeObjects para mesclar os subdocumentos data de cada fonte. Como os documentos FilmeCritic e ViewerVault contêm nomes de campo diferentes, o resultado mesclado inclui todos os campos de ambas as fontes.

  • $sort ordena os resultados alfabeticamente por título.