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

$setUnion (operador acumulador )

$setUnion

Retorna uma array dos elementos exclusivos nos valores de array em um grupo de documentos.

Novidades na versão 8.1.

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

Observação

Desambiguação

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

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

{ $setUnion: "<array field>" }

$setUnion executa operação de conjunto em arrays, tratando arrays como conjuntos. Se uma array contiver entradas duplicadas, $setUnion ignorará as entradas duplicadas. $setUnion ignora a ordem dos elementos.

$setUnion filtra duplicatas em seu resultado para gerar uma matriz que contém apenas entradas exclusivas. A ordem dos elementos na matriz de saída não é especificada.

Se um conjunto contiver um elemento de array aninhada, $setUnion não desce para a array aninhada, mas avalia a array no nível superior.

Para ver como $setUnion trata os elementos de array aninhados, consulte os exemplos na seção $setUnion (expression) .

Os argumentos que são null ou que resultam em null são incluídos nos resultados. Os argumentos que se referem a um campo ausente não são incluídos nos resultados.

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.

Este exemplo usa $setUnion para retornar os gêneros distintos nos quais três diretores específicos trabalharam:

db.movies.aggregate( [
{
$unwind: "$directors"
},
{
$match: {
directors: {
$in: [ "Christopher Nolan", "Sofia Coppola", "Spike Lee" ]
}
}
},
{
$group: {
_id: "$directors",
movieCount: { $sum: 1 },
genres: { $setUnion: "$genres" }
}
},
{
$sort: { _id: 1 }
}
] )

O pipeline anterior:

  • Utiliza $unwind para criar um documento separado para cada crédito de diretor .

  • Utiliza $match para filtrar três directores específicos.

  • Usa $group para agrupar por diretor, contar os filmes com $sum e combinar as arrays genres de todos os filmes do diretor em uma única array de gêneros únicos com $setUnion.

  • Utiliza $sort para classificar os resultados por nome do diretor .

  • $setUnion suporta apenas arrays e expressões que resolvem para uma array.