Definição
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 (expression), que combina duas ou mais arrays em uma única array de elementos únicos.$setUnion (window function), que é usado no estágio$setWindowFieldspara retornar uma única array de elementos únicos nos valores de array em uma janela.
Sintaxe
{ $setUnion: "<array field>" }
Comportamento
$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.
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.
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:
Limitações
$setUnionsuporta apenas arrays e expressões que resolvem para uma array.