Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$minN (acumulador de agregación)

$minN

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:
{
input: <expression>,
n: <expression>
}
}
Campo
Tipo
Descripción

input

expresión

Una expresión evaluada para cada documento de entrada para determinar los valores de entrada. Los valores n más pequeños se conservan para cada grupo.

n

expresión

Determina el número máximo de resultados devueltos por grupo. n debe evaluarse como un número entero positivo.

Cuando $minN compara valores de diferentes tipos, el orden de los tipos sigue el orden de comparación BSON.

$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:

  • $documents crea los documentos literales que contienen las puntuaciones de los jugadores.

  • $group agrupa los documentos por gameId. Este ejemplo tiene solo un gameId, G1.

  • PlayerD tiene una puntuación faltante y PlayerE tiene un score nulo. Ambos valores se ignoran.

  • El campo minimumThreeScores se especifica como $minN con input : "$score" y se devuelve como una matriz.

  • Dado que solo hay documentos 3 con scores, $minN devuelve los campos 3 score mínimos aunque n = 4.

[
{
_id: 'G1',
minimumThreeScores: [ 1, 2, 3 ]
}
]

Tanto los acumuladores $minN como $bottomN devuelven valores n de un grupo, pero difieren en cómo determinan qué valores devolver.

  • Utilice $minN cuando los valores que desea comparar sean los mismos que desea devolver. $minN selecciona los n valores más pequeños comparando las entradas directamente.

  • Utilice $bottomN cuando desee definir el orden de clasificación por separado de la salida. $bottomN le permite especificar una clave sortBy para determinar qué documentos son "inferiores" y una expresión output para controlar qué valores devolver.

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.

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 $match para filtrar los resultados a películas donde Horror está incluido en el array genres.

  • Utiliza $group para agrupar todos los documentos coincidentes en un solo grupo.

  • Especifica la entrada para $minN con input: "$imdb.rating".

  • Utiliza $minN para devolver las tres entradas con la calificación más baja de IMDb para el género Horror con n: 3.

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 $unwind para crear un documento separado para cada género en el array genres.

  • Utiliza $group para agrupar los resultados por genres.

  • Utiliza $minN para devolver las tres entradas con la calificación más baja de IMDb para cada género con n: 3.

  • Especifica la entrada para $minN con input: "$imdb.rating".

  • Utiliza $sort para ordenar los resultados alfabéticamente por género.

  • Limita la salida a cinco documentos para mejorar la legibilidad.

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-13 o R.

  • Agrupa las películas por rated (la clasificación por contenido).

  • Especifica la entrada para $minN con input: "$imdb.rating".

  • Utiliza la expresión $cond para devolver 3 entradas mínimas para películas con calificación R y 1 entrada 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.