Definición
Devuelve una matriz con todos los valores que resultan de aplicar una expresión a cada documento de un grupo.
El acumulador $push está disponible en estas etapas:
Nota
Desambiguación
Esta página describe $push cuando se utiliza como acumulador. Los acumuladores devuelven un valor agregado a partir de un grupo de documentos de entrada.
También puedes usar $push en estos otros contextos:
$push (window function), que se utiliza en la etapa$setWindowFieldspara devolver una matriz de todos los valores de los documentos en una ventana en particular.$push (update operator), que agrega un valor a un campo de matriz en un documento.
Sintaxis
{ $push: <expression> }
Para obtener más información sobre las expresiones, consulta Expresiones.
Comportamiento
Cuando se utiliza $push como acumulador, el orden de los documentos que ingresan a la canalización determina el orden de los documentos en el array de salida. Para garantizar un orden definido, coloque una etapa $sort antes de la etapa $group.
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargar el conjunto de datos de ejemplo. Si realizó alguna modificación en las bases de datos de ejemplo, es posible que deba eliminarlas y volver a crearlas para ejecutar los ejemplos de esta página.
La siguiente operación agrupa las películas por director y utiliza el acumulador $push para recopilar el género principal de cada película dirigida por ese director.
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 } ] )
La tubería precedente:
Utiliza
$matchpara filtrar las películas de 2010-2015 que tienen información de género y director.Utiliza
$unwindpara crear un documento separado para cada director en el arraydirectors.Agrupa los documentos resultantes por director y utiliza
$pushpara recopilar el género principal de cada película.Ordena los resultados por nombre del director en orden alfabético.
Limita la producción a cinco directores.
En la salida, A.R. Murugadoss tiene Action listado dos veces porque dirigió dos películas con Action como género principal. Esto demuestra que $push incluye valores duplicados, a diferencia de $addToSet, que devuelve una matriz de valores únicos.