Definição
Retorna uma array de todos os valores, incluindo duplicatas, que resultam da aplicação de uma expressão a cada documento em uma janela.
Observação
Desambiguação
Esta página descreve $push quando usado como uma função de janela.
Você também pode usar $push nestes outros contextos:
$push (accumulator), que retorna a array resultante após aplicar uma expressão a cada documento em um grupo.$push (update operator), que acrescenta um valor a um campo de array em um documento.
Sintaxe
{ $setWindowFields: { ... output: { <field>: { $push: <expression> } } } }
Comportamento
$push inclui todos os valores na janela, inclusive duplicatas. A ordem dos elementos na array de saída corresponde à ordem de classificação especificada no campo$setWindowFields sortBy .
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 a função de janela $push para criar uma lista de execução de gêneros em filmes de 2002. Para cada filme, $push adiciona o gênero principal do filme a genresSeenSoFar, mantendo todos os valores, incluindo os duplicados.
db.movies.aggregate( [ { $match: { year: 2002, genres: { $exists: true, $ne: [] } } }, { $addFields: { primaryGenre: { $first: "$genres" } } }, { $setWindowFields: { sortBy: { title: 1 }, output: { genresSeenSoFar: { $push: "$primaryGenre", window: { documents: [ "unbounded", "current" ] } } } } }, { $project: { _id: 0, genresSeenSoFar: "$genresSeenSoFar", year: "$year", title: "$title", genre: "$primaryGenre", totalGenreCount: { $size: "$genresSeenSoFar" } } }, { $limit: 8 } ] )
No exemplo:
O estágio
$matchfiltra para filmes de 2002 com informações de gênero.O estágio
$addFieldsadiciona um campoprimaryGenreque contém o primeiro elemento na arraygenres.O estágio
$setWindowFieldsusa$pushcom uma janela deunboundedacurrentpara acumular todos os gêneros desde o início da configuração de resultados até o documento atual.O estágio
$projectremodela a saída e calculatotalGenreCountpara mostrar como a array cresce com cada documento.O estágio
$limitrestringe a saída para documentos 8 para melhorar a legibilidade.
totalGenreCount aumenta de um a cada documento. O sétimo documento ('3 Extremes II') tem gênero Horror, que já estava na array, então Horror aparece duas vezes em genresSeenSoFar. Isso demonstra que $push inclui valores duplicados, ao contrário de $addToSet, que adiciona apenas valores únicos.