Definición
Devuelve una matriz que contiene el máximo de elementos n dentro de una ventana.
Nota
Otros usos de $maxN
Esta página describe $maxN cuando se utiliza como función de ventana.
También puedes usar $maxN en estos otros contextos:
$maxN (accumulator), que devuelve los valores máximos dendentro de un grupo.$maxN (expression), que devuelve los valoresnmás grandes de una matriz.
Sintaxis
{ $setWindowFields: { ... output: { <field>: { $maxN: { input: <expression>, n: <expression> }, window: { documents: [ <lower boundary>, <upper boundary> ] } } } } }
opciones
Campo | Tipo | Descripción |
|---|---|---|
| expresión | La expresión se evalúa sobre cada documento en la ventana. |
| expresión | El número de elementos que Si la ventana contiene menos de |
Comportamiento
Valores nulos y faltantes
$maxN filtra los valores nulos y ausentes.
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 $maxN en $setWindowFields para devolver las tres películas mejor valoradas de cada año. La ventana abarca toda la partición, por lo que cada documento del mismo año recibe el mismo valor topThreeRatedInYear.
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2001 ] }, "imdb.rating": { $gte: 8.5 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": -1 }, output: { topThreeRatedInYear: { $maxN: { input: [ "$imdb.rating", "$title" ], n: 3 }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, topThreeRatedInYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1 } } ] )
La tubería precedente:
Utiliza
$matchpara filtrar películas estrenadas en1999o2001con una calificación IMDb de8.5o superior.Utiliza
$setWindowFieldspara particionar las películas poryeary ordenarlas porimdb.ratingen orden descendente. La etapa utiliza$maxNconn: 3para creartopThreeRatedInYeara partir de una ventana que abarca toda la partición (documents: ["unbounded", "unbounded"]).Utiliza
$projectpara incluir solo los campostitle,year,imdb.ratingytopThreeRatedInYearen la salida.Utiliza
$sortpara ordenar los resultados por año ascendente y calificación descendente.