Definição
Obtém duas ou mais arrays e retorna uma única array contendo os elementos exclusivos que aparecem em qualquer array de entrada.
Observação
Desambiguação
Esta página descreve $setUnion quando usado como uma expressão, que combina duas ou mais arrays em uma única array de elementos únicos.
Você também pode usar $setUnion nestes outros contextos:
$setUnion (accumulator), que retorna uma única array dos elementos exclusivos nos valores de array em um grupo de documentos.$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: [ <expression1>, <expression2>, ... ] }
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.
Os argumentos podem ser qualquer expressão válida, desde que cada um deles resolva para uma array. Para mais informações sobre expressões, consulte Expressões.
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.
A tabela a seguir mostra os resultados que $setUnion retorna para diferentes entradas:
Exemplo | Resultado | Notas | |||||
|---|---|---|---|---|---|---|---|
| | Todos os elementos de ambas as arrays são combinados e os elementos duplicados removidos. | |||||
| | Todos os elementos de ambas as arrays são combinados e os elementos duplicados removidos. | |||||
| | Todos os elementos de ambas as arrays são combinados e os elementos duplicados removidos. | |||||
| | O resultado inclui | |||||
| | O resultado consiste nos elementos exclusivos na segunda array porque a primeira array está vazia. | |||||
| | Todos os elementos de ambas as arrays são combinados e os elementos duplicados removidos. |
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 utiliza $setUnion para combinar as arrays cast e directors em uma única array das pessoas créditodas em cada filme:
db.movies.aggregate( [ { $match: { title: { $in: [ "Annie Hall", "Reservoir Dogs" ] } } }, { $project: { _id: 0, title: 1, cast: 1, directors: 1, keyContributors: { $setUnion: [ "$cast", "$directors" ] } } }, { $sort: { title: 1 } } ] )
O pipeline anterior:
Utiliza
$matchpara filtrar dois filmes.Utiliza
$projectcom$setUnionpara combinarcastedirectorsno campokeyContributors.Utiliza
$sortpara classificar resultados portitle.
Para Annie Hall, Wiphyllum allen aparece em cast e directors, mas aparece apenas uma vez em keyContributors, porque $setUnion remove elementos duplicados.
Limitações
$setUnionsuporta apenas arrays e expressões que resolvem para uma array.