Definição
Retorna um array de todos os valores que resultam da aplicação de uma expressão a cada documento em um grupo.
O acumulador $push está disponível nestes estágios:
Observação
Desambiguação
Esta página descreve $push quando usado como um acumulador. Acumuladores retornam um valor agregado em um grupo de documentos de entrada.
Você também pode usar $push nestes outros contextos:
$push (window function), que é usado no estágio$setWindowFieldspara retornar uma array de todos os valores de documentos em uma janela específica.$push (update operator), que anexa um valor a um campo de array em um documento.
Sintaxe
{ $push: <expression> }
Para mais informações sobre expressões, consulte Expressões.
Comportamento
Quando você usa $push como um acumulador, a ordem dos documentos que entram no pipeline determina a ordem dos documentos na array de saída. Para garantir uma ordem definida, coloque um $sort estágio antes do $group estágio.
Exemplo
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
A operação a seguir agrupa filmes por diretor e usa o acumulador $push para coletar o gênero primário de cada filme dirigido por esse diretor.
db.movies.aggregate( [ { $match: { year: { $gte: 2010, $lte: 2015 }, genres: { $exists: true, $ne: [] }, directors: { $exists: true, $ne: [] } } }, { $unwind: "$directors" }, { $group: { _id: "$directors", genres: { $push: { $first: "$genres" } } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
O pipeline anterior:
Usa
$matchpara usar filtro para filtrar filmes de 2010-2015 que têm informações de gênero e diretor.Usa
$unwindpara criar um documento separado para cada diretor no arraydirectors.Agrupa os documentos resultantes por diretor e usa
$pushpara coletar o gênero primário de cada filme.Ordena os resultados pelo nome do diretor em ordem alfabética.
Limita a saída a cinco diretores.
No resultado, A.R. Murugadoss tem Action listado duas vezes porque dirigiram dois filmes com Action como gênero primário. Isso demonstra que $push inclui valores duplicados, ao contrário de $addToSet, que retorna um array de valores exclusivos.