As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
$push
O operador $push de agregação retorna uma matriz de todos os valores de uma expressão especificada para cada grupo. Normalmente é usado dentro do $group estágio para acumular valores em uma matriz.
Parâmetros
-
expression: A expressão a ser avaliada para cada documento no grupo.
Exemplo (MongoDB Shell)
O exemplo a seguir demonstra o uso do $push operador para coletar todos os nomes de produtos de cada categoria.
Crie documentos de amostra
db.sales.insertMany([ { _id: 1, category: "Electronics", product: "Laptop", amount: 1200 }, { _id: 2, category: "Electronics", product: "Mouse", amount: 25 }, { _id: 3, category: "Furniture", product: "Desk", amount: 350 }, { _id: 4, category: "Furniture", product: "Chair", amount: 150 }, { _id: 5, category: "Electronics", product: "Keyboard", amount: 75 } ]);
Exemplo de consulta
db.sales.aggregate([ { $group: { _id: "$category", products: { $push: "$product" } } } ]);
Saída
[
{ _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
{ _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
Exemplo de uso do operador de janela (MongoDB Shell)
Novo na versão 8.0.2.
O $push operador também pode ser usado como operador de janela no $setWindowFields palco. Nesse contexto, ele retorna uma matriz de todos os valores da expressão especificada para os documentos em cada janela, em ordem de classificação. Você especifica o operador no output campo e, opcionalmente, define os limites da janela com um window documento.
nota
Quando usado como operador de janela em$setWindowFields, $push é limitado a 100 MB de dados intermediários. Uma operação que excede esse limite retorna um erro.
Crie documentos de amostra
db.purchases.insertMany([ { _id: 1, category: "Electronics", day: 1, product: "Laptop" }, { _id: 2, category: "Electronics", day: 2, product: "Mouse" }, { _id: 3, category: "Electronics", day: 3, product: "Keyboard" }, { _id: 4, category: "Furniture", day: 1, product: "Desk" }, { _id: 5, category: "Furniture", day: 2, product: "Chair" } ]);
Exemplo de consulta
O exemplo a seguir particiona os documentos porcategory, classifica cada partição por day e retorna uma lista contínua de product valores desde o início da partição até o documento atual.
db.purchases.aggregate([ { $setWindowFields: { partitionBy: "$category", sortBy: { day: 1 }, output: { productsSoFar: { $push: "$product", window: { documents: ["unbounded", "current"] } } } } } ]);
Saída
[
{ "_id": 1, "category": "Electronics", "day": 1, "product": "Laptop", "productsSoFar": [ "Laptop" ] },
{ "_id": 2, "category": "Electronics", "day": 2, "product": "Mouse", "productsSoFar": [ "Laptop", "Mouse" ] },
{ "_id": 3, "category": "Electronics", "day": 3, "product": "Keyboard", "productsSoFar": [ "Laptop", "Mouse", "Keyboard" ] },
{ "_id": 4, "category": "Furniture", "day": 1, "product": "Desk", "productsSoFar": [ "Desk" ] },
{ "_id": 5, "category": "Furniture", "day": 2, "product": "Chair", "productsSoFar": [ "Desk", "Chair" ] }
]
Cada documento é aumentado com a matriz de todos os product valores em sua partiçãoproductsSoFar, desde o início até o documento atual, em ordem de classificação.
Exemplos de código
Para ver um exemplo de código para usar o $push operador, escolha a guia do idioma que você deseja usar. Os exemplos a seguir mostram o uso do acumulador (em$group) e o uso do operador de janela (em$setWindowFields):