Definición
Devuelve los valores mínimos de n dentro de un grupo. Si el grupo contiene menos de n elementos, $minN devuelve todos los elementos del grupo.
Nota
Desambiguación
Esta página describe el uso de $minN como acumulador. Los acumuladores devuelven un valor agregado, como la suma, el máximo o el mínimo, de un grupo de documentos de entrada.
También puedes usar $minN en estos otros contextos:
$minN (expression), que devuelve losnvalores mínimos en una matriz.$minN (window function), que se utiliza en la etapa$setWindowFieldspara devolver los valores mínimosnde los documentos en una ventana en particular.
Sintaxis
{ $minN: { input: <expression>, n: <expression> } }
Campo | Tipo | Descripción |
|---|---|---|
| expresión | Una expresión evaluada para cada documento de entrada para determinar los valores de entrada. Los valores |
| expresión | Determina el número máximo de resultados devueltos por grupo. |
Comportamiento
Tipo de resultado
Cuando $minN compara valores de diferentes tipos, el orden de los tipos sigue el orden de comparación BSON.
Valores nulos y faltantes
$minN filtra los valores nulos y ausentes.
Considere la siguiente agregación que devuelve los valores mínimos de n de un grupo:
db.aggregate( [ { $documents: [ { playerId: "PlayerA", gameId: "G1", score: 1 }, { playerId: "PlayerB", gameId: "G1", score: 2 }, { playerId: "PlayerC", gameId: "G1", score: 3 }, { playerId: "PlayerD", gameId: "G1" }, { playerId: "PlayerE", gameId: "G1", score: null } ] }, { $group: { _id: "$gameId", minimumThreeScores: { $minN: { input: "$score", n: 4 } } } } ] )
En este ejemplo:
$documentscrea los documentos literales que contienen las puntuaciones de los jugadores.$groupagrupa los documentos porgameId. Este ejemplo tiene solo ungameId,G1.PlayerDtiene una puntuación faltante yPlayerEtiene unscorenulo. Ambos valores se ignoran.El campo
minimumThreeScoresse especifica como$minNconinput : "$score"y se devuelve como una matriz.Dado que solo hay documentos 3 con
scores,$minNdevuelve los campos 3scoremínimos aunquen = 4.
[ { _id: 'G1', minimumThreeScores: [ 1, 2, 3 ] } ]
Comparación de los acumuladores $minN y $bottomN
Tanto los acumuladores $minN como $bottomN devuelven valores n de un grupo, pero difieren en cómo determinan qué valores devolver.
Utilice
$minNcuando los valores que desea comparar sean los mismos que desea devolver.$minNselecciona losnvalores más pequeños comparando las entradas directamente.Utilice
$bottomNcuando desee definir el orden de clasificación por separado de la salida.$bottomNle permite especificar una clavesortBypara determinar qué documentos son "inferiores" y una expresiónoutputpara controlar qué valores devolver.
Ejemplos
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.
Encuentra las tres calificaciones mínimas para un solo género.
Puedes usar el acumulador $minN para encontrar las tres calificaciones más bajas de IMDb en un solo género.
db.movies.aggregate( [ { $match: { genres: "Horror" } }, { $group: { _id: "Horror", minThreeRatings: { $minN: { input: "$imdb.rating", n: 3 } } } } ] )
La pipeline de ejemplo:
Utiliza
$matchpara filtrar los resultados a películas dondeHorrorestá incluido en el arraygenres.Utiliza
$grouppara agrupar todos los documentos coincidentes en un solo grupo.Especifica la entrada para
$minNconinput: "$imdb.rating".Utiliza
$minNpara devolver las tres entradas con la calificación más baja de IMDb para el géneroHorrorconn: 3.
Encuentra las tres calificaciones mínimas en varios géneros.
Puedes usar el acumulador $minN para encontrar las calificaciones mínimas n de IMDb en cada género.
db.movies.aggregate( [ { $unwind: "$genres" }, { $group: { _id: "$genres", minThreeRatings: { $minN: { input: "$imdb.rating", n: 3 } } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
La pipeline de ejemplo:
Utiliza
$unwindpara crear un documento separado para cada género en el arraygenres.Utiliza
$grouppara agrupar los resultados porgenres.Utiliza
$minNpara devolver las tres entradas con la calificación más baja de IMDb para cada género conn: 3.Especifica la entrada para
$minNconinput: "$imdb.rating".Utiliza
$sortpara ordenar los resultados alfabéticamente por género.Limita la salida a cinco documentos para mejorar la legibilidad.
Establecer n dinámicamente en función de la clave de grupo.
Puedes asignar el valor de n dinámicamente. En este ejemplo, la expresión $cond se utiliza en el campo rated.
db.movies.aggregate( [ { $match: { rated: { $in: [ "G", "PG", "PG-13", "R" ] } } }, { $group: { _id: { "rated": "$rated" }, minMovies: { $minN: { input: "$imdb.rating", n: { $cond: { if: { $eq: [ "$rated", "R" ] }, then: 3, else: 1 } } } } } } ] )
La pipeline de ejemplo:
Filtros para películas con calificaciones de
G,PG,PG-13oR.Agrupa las películas por
rated(la clasificación por contenido).Especifica la entrada para
$minNconinput: "$imdb.rating".Utiliza la expresión
$condpara devolver3entradas mínimas para películas con calificaciónRy1entrada mínima para todas las demás calificaciones.
En la salida, la calificación R devuelve entradas 3, mientras que las calificaciones G, PG y PG-13 devuelven cada una una entrada 1.