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.

$push (operador acumulador )

$push

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: <expression> }

Para mais informações sobre expressões, consulte Expressões.

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.

O acumulador $push não pode gravar arquivos temporários em disco. O parâmetro de servidor internalQueryMaxPushBytes controla o limite de memória $push e, se o array acumulado exceder esse limite, o MongoDB retornará um erro mesmo quando allowDiskUse for true. Por padrão, o parâmetro é 104857600 bytes (100 megabytes). Você pode aumentar o limite em tempo de execução com o comando setParameter, até um máximo de 2147483647 bytes.

Para mais informações sobre as restrições de memória de agregação, consulte Limites de pipeline de agregação.

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 $match para usar filtro para filtrar filmes de 2010-2015 que têm informações de gênero e diretor.

  • Usa $unwind para criar um documento separado para cada diretor no array directors.

  • Agrupa os documentos resultantes por diretor e usa $push para 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.