Definição
Retorna uma array de todos os valores resultantes da aplicação de uma expressão a cada documento em um grupo.
O acumulador $push está disponível nos seguintes estágios:
Observação
Desambiguação
Esta página descreve $push quando usado como acumulador. Os 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 acrescenta 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 acumulador, a ordem dos documentos que chegam ao pipeline determina a ordem dos documentos na array de saída. Para garantir um pedido definido, coloque um estágio $sort antes do estágio $group.
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.
A operação a seguir agrupa filmes por diretor e usa o acumulador $push para coletar o gênero principal 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 filtrar filmes de 2010-2015 que possuem informações de gênero e diretor .Usa
$unwindpara criar um documento separado para cada diretor na arraydirectors.Agrupa os documentos resultantes por diretor e usa
$pushpara coletar o gênero principal de cada filme.Classifica os resultados por nome do diretor em ordem alfabética.
Limita a saída a cinco diretores.
Na saída, A.R. Murugadoss tem Action listado duas vezes porque direcionou dois filmes com Action como o gênero principal. Isso demonstra que $push inclui valores duplicados, diferentemente de $addToSet, que retorna uma array de valores únicos.