Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
$push
El operador de $push agregación devuelve una matriz de todos los valores de una expresión especificada para cada grupo. Por lo general, se usa dentro de la $group etapa para acumular valores en una matriz.
Parámetros
-
expression: la expresión que se va a evaluar para cada documento del grupo.
Ejemplo (MongoDB Shell)
El siguiente ejemplo muestra cómo usar el $push operador para recopilar todos los nombres de productos de cada categoría.
Cree documentos de muestra
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 } ]);
Ejemplo de consulta
db.sales.aggregate([ { $group: { _id: "$category", products: { $push: "$product" } } } ]);
Salida
[
{ _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
{ _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
Ejemplo de uso de un operador de ventana (MongoDB Shell)
Nuevo a partir de la versión 8.0.2.
El $push operador también se puede utilizar como operador de ventanas en el $setWindowFields escenario. En este contexto, devuelve una matriz con todos los valores de la expresión especificada para los documentos de cada ventana, ordenados por orden de clasificación. Especifique el operador en el output campo y, si lo desea, defina los límites de la ventana con un window documento.
nota
Cuando se usa como operador de ventana en$setWindowFields, $push está limitado a 100 MB de datos intermedios. Una operación que supera este límite devuelve un error.
Crea documentos de muestra
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" } ]);
Ejemplo de consulta
El ejemplo siguiente divide los documentos porcategory, ordena cada partición y devuelve una lista continua de product valores desde el principio de la partición hasta el documento actual. day
db.purchases.aggregate([ { $setWindowFields: { partitionBy: "$category", sortBy: { day: 1 }, output: { productsSoFar: { $push: "$product", window: { documents: ["unbounded", "current"] } } } } } ]);
Salida
[
{ "_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 se complementa con productsSoFar la matriz de todos los product valores de su partición desde el principio hasta el documento actual, en orden de clasificación.
Ejemplos de código
Para ver un ejemplo de código sobre el uso $push del operador, seleccione la pestaña correspondiente al idioma que desee utilizar. Los siguientes ejemplos muestran tanto el uso del acumulador (en$group) como el uso del operador de ventanas (en$setWindowFields):