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

$maxN (operador acumulador)

$maxN

Devuelve una agregación de los elementos con el valor máximo n dentro de un grupo. Si el grupo contiene menos de n elementos, $maxN devuelve todos los elementos del grupo.

El acumulador $maxN está disponible en estas etapas:

Nota

Otros usos de $maxN

Esta página describe el uso de $maxN 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 $maxN en estos otros contextos:

{
$maxN:
{
input: <expression>,
n: <expression>
}
}
Campo
Tipo
Descripción

input

expresión

La expresión evaluada para cada elemento del grupo. $maxN conserva los valores máximos de n.

n

expresión

El número de elementos que $maxN devuelve del grupo. Para ver un ejemplo de cómo configurar n dinámicamente, consulte Establecer n en función de la clave del grupo.

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

$maxN filtra los valores nulos y ausentes.

La siguiente agregación demuestra cómo $maxN maneja los valores nulos y faltantes:

db.aggregate( [
{
$documents: [
{ title: "Fight Club", genre: "Drama", rating: 8.9 },
{ title: "The Matrix", genre: "Drama", rating: 8.7 },
{ title: "The Green Mile", genre: "Drama", rating: 8.5 },
{ title: "Magnolia", genre: "Drama" },
{ title: "Dogma", genre: "Drama", rating: null }
]
},
{
$group: {
_id: "$genre",
topFourRatings: {
$maxN: {
input: "$rating",
n: 4
}
}
}
}
] )
[
{
_id: 'Drama',
topFourRatings: [ 8.9, 8.7, 8.5 ]
}
]

En este ejemplo:

  • $documents crea los documentos literales que contienen las calificaciones de las películas.

  • $group agrupa los documentos por genre. Este ejemplo tiene solo un genre, Drama.

  • Magnolia tiene un rating faltante y Dogma tiene un rating nulo. Ambos valores se filtran.

  • Dado que solo los documentos 3 tienen calificaciones válidas, $maxN devuelve valores 3 aunque n = 4.

Puedes usar $maxN o $topN para devolver los elementos n mejor clasificados de un grupo. La elección entre ellos depende de si tus documentos de entrada ya están ordenados.

  • Si los documentos de entrada ya están ordenados, utilice $maxN para devolver los valores máximos de n.

  • Si necesita ordenar y seleccionar los elementos n superiores al mismo tiempo, utilice $topN para lograr ambas cosas con un solo acumulador.

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 $maxN para encontrar las tres calificaciones más altas de IMDb para películas estrenadas en un solo año.

db.movies.aggregate( [
{
$match: {
year: 1999,
"imdb.rating": { $exists: true }
}
},
{
$group: {
_id: 1999,
topThreeRatings: {
$maxN: {
input: "$imdb.rating",
n: 3
}
}
}
}
] )

La tubería precedente:

  • Utiliza $match para filtrar las películas estrenadas en 1999 que tienen un campo imdb.rating.

  • Agrupa todos los documentos coincidentes en un único grupo con _id: 1999.

  • Especifica "$imdb.rating" como input para $maxN.

  • Utiliza $maxN para devolver las tres calificaciones más altas con n: 3.

Puedes usar el acumulador $maxN para encontrar las tres películas mejor valoradas de cada año en un conjunto de años.

db.movies.aggregate( [
{
$match: {
year: { $in: [ 1999, 2000, 2001 ] },
"imdb.rating": { $exists: true }
}
},
{
$group: {
_id: "$year",
topThreeRatings: {
$maxN: {
input: "$imdb.rating",
n: 3
}
}
}
},
{ $sort: { _id: 1 } }
] )

La tubería precedente:

  • Utiliza $match para filtrar películas estrenadas en 1999, 2000 o 2001 que tengan un campo imdb.rating.

  • Utiliza $group para agrupar películas por year.

  • Especifica "$imdb.rating" como input para $maxN.

  • Utiliza $maxN para devolver las tres calificaciones más altas por año con n: 3.

  • Ordena los resultados por año en orden ascendente.

Puede asignar el valor de n dinámicamente en función de la clave de grupo. En este ejemplo, la expresión $cond utiliza el campo year para cambiar el valor de n:

db.movies.aggregate( [
{
$match: {
year: { $in: [ 1999, 2000, 2001 ] },
"imdb.rating": { $exists: true }
}
},
{
$group: {
_id: { year: "$year" },
topRatedMovies: {
$maxN: {
input: "$imdb.rating",
n: { $cond: {
if: { $eq: [ "$year", 2001 ] },
then: 3,
else: 1
} }
}
}
}
},
{ $sort: { "_id.year": 1 } }
] )

La tubería precedente:

En la salida, 2001 devuelve tres calificaciones, mientras que 1999 y 2000 devuelven una calificación cada una.