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.

$mergeObjects (operador acumulador )

$mergeObjects

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

O acumulador $mergeObjects está disponível nestes estágios:

Observação

Desambiguação

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

Você também pode usar o $mergeObjects (expression), que mescla um array de documentos em um único documento.

{ $mergeObjects: <expression> }

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

$mergeObjects ignora null valores de entrada. Se todos os valores de entrada forem null, $mergeObjects retornará um documento vazio { }.

$mergeObjects substitui os valores dos campos à medida que mescla os documentos. Se vários documentos de entrada contiverem o mesmo nome de campo, a saída contém 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 de filmCritic 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 inclui todos os quatro campos.

O pipeline a seguir usa $mergeObjects em um estágio $group para combinar os dados de revisar 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 utiliza $mergeObjects para mesclar os data subdocumentos de cada fonte. Como os documentos FilmCritic 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.