Definición
Devuelve una matriz con todos los valores, incluidos los duplicados, que resultan de aplicar una expresión a cada documento en una ventana.
Nota
Desambiguación
Esta página describe $push cuando se utiliza como función de ventana.
También puedes usar $push en estos otros contextos:
$push (accumulator), que devuelve la matriz resultante después de aplicar una expresión a cada documento de un grupo.$push (update operator), que agrega un valor a un campo de matriz en un documento.
Sintaxis
{ $setWindowFields: { ... output: { <field>: { $push: <expression> } } } }
Comportamiento
$push Incluye todos los valores de la ventana, incluidos los duplicados. El orden de los elementos en la matriz de salida corresponde al orden de clasificación especificado en el campo $setWindowFields sortBy.
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.
Este ejemplo utiliza la función de ventana $push para crear una lista acumulativa de géneros en las películas de 2002. Para cada película, $push agrega el género principal de la película a genresSeenSoFar, conservando todos los valores, incluidos los duplicados.
db.movies.aggregate( [ { $match: { year: 2002, genres: { $exists: true, $ne: [] } } }, { $addFields: { primaryGenre: { $first: "$genres" } } }, { $setWindowFields: { sortBy: { title: 1 }, output: { genresSeenSoFar: { $push: "$primaryGenre", window: { documents: [ "unbounded", "current" ] } } } } }, { $project: { _id: 0, genresSeenSoFar: "$genresSeenSoFar", year: "$year", title: "$title", genre: "$primaryGenre", totalGenreCount: { $size: "$genresSeenSoFar" } } }, { $limit: 8 } ] )
En el ejemplo:
La etapa
$matchfiltra las películas de 2002 con información de género.La etapa
$addFieldsagrega un campoprimaryGenreque contiene el primer elemento en el arraygenres.La etapa
$setWindowFieldsutiliza$pushcon una ventanaunboundedacurrentpara acumular todos los géneros desde el inicio del conjunto de resultados hasta el documento actual.La etapa
$projectremodela la salida y calculatotalGenreCountpara mostrar cómo crece la matriz con cada documento.
totalGenreCount aumenta en uno con cada documento. El séptimo documento ('3 Extremes II') tiene el género Horror, que ya estaba en el array, por lo que Horror aparece dos veces en genresSeenSoFar. Esto demuestra que $push incluye valores duplicados, a diferencia de $addToSet, que solo añade valores únicos.