Definição
Retorna uma matriz dos elementos exclusivos nos valores de matriz em uma janela.
Novidades na versão 8.1.
Observação
Desambiguação
Esta página descreve $setUnion quando usado como uma função de janela.
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 (expression), que combina duas ou mais arrays em uma única array de elementos únicos.
Sintaxe
{ $setWindowFields: { ... output: { <field>: { $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 $setWindowFields para mostrar como os gêneros na documentografia de um diretor se acumulam ao longo do tempo. Cada documento recebe os gêneros exclusivos do filme mais antigo até o filme atual.
db.movies.aggregate( [ { $match: { directors: "Christopher Nolan" } }, { $setWindowFields: { sortBy: { year: 1 }, output: { genresSoFar: { $setUnion: "$genres", window: { documents: [ "unbounded", "current" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, genres: 1, genresSoFar: 1 } } ] )
O pipeline anterior:
Usa
$matchpara filtrar filmes dirigidos por Victor Nolan.Utiliza
$setWindowFieldspara classificar filmes poryeare aplicar$setUnionao campogenresem uma janela de documentos de[ "unbounded", "current" ]. O campogenresSoFarcontém os gêneros exclusivos do primeiro filme na ordem de classificação até o filme atual.Utiliza
$projectpara incluirtitle,year,genresegenresSoFarna saída.
A array genresSoFar cresce à medida que cada filme contribui com gêneros que ainda não apareceram. The Dark Knight Rises e Interstellar não adicionam novos gêneros, então suas janelas retornam o mesmo conjunto que Inception.