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 (função de janela)

$setUnion

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.

{
$setWindowFields: {
...
output: {
<field>: {
$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 $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 $match para filtrar filmes dirigidos por Victor Nolan.

  • Utiliza $setWindowFields para classificar filmes por year e aplicar $setUnion ao campo genres em uma janela de documentos de [ "unbounded", "current" ]. O campo genresSoFar contém os gêneros exclusivos do primeiro filme na ordem de classificação até o filme atual.

  • Utiliza $project para incluir title, year, genres e genresSoFar na 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.