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

$topN (función de ventana)

$topN

Devuelve los elementos n superiores dentro de una ventana particular, según el orden de clasificación especificado.

Nota

Otros usos de $topN

Esta página describe $topN cuando se utiliza como función de ventana.

También puedes usar $topN en estos otros contextos:

  • $topN (accumulator), que devuelve los n elementos superiores dentro de un grupo según el orden de clasificación especificado.

  • $topN (expression), que devuelve los n elementos superiores de una matriz.

{
$setWindowFields: {
...
output: {
<field>: {
$topN: {
n: <expression>,
output: <expression>,
sortBy: {
<field1>: <sort order>,
<field2>: <sort order>, ...
}
}
}
}
}
}
Campo
Necesidad
Descripción

n

Requerido

Número de resultados a devolver. Debe redondearse a un valor entero positivo.

Si la ventana contiene menos de n elementos, $topN devuelve todos los elementos de la ventana.

output

Requerido

Determina la salida para cada documento en la ventana. Puede ser cualquier expresión.

sortBy

Requerido

Define el orden de clasificación de los elementos dentro de la ventana, con una sintaxis similar a $sort. No afecta el orden de los documentos en la salida del pipeline.

  • $topN no filtra los valores nulos.

  • $topN convierte los valores faltantes en null.

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 $topN en $setWindowFields para devolver cada película con las tres películas mejor valoradas estrenadas en el mismo año.

db.movies.aggregate( [
{
$match: {
year: { $in: [ 1999, 2001 ] },
"imdb.rating": { $gte: 8.5 }
}
},
{
$setWindowFields: {
partitionBy: "$year",
output: {
topThreeRatedInYear: {
$topN: {
sortBy: { "imdb.rating": -1, title: 1 },
output: { rating: "$imdb.rating", title: "$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 }
}
] )

En el ejemplo precedente:

  • $match filtra películas estrenadas en 1999 o 2001 con una calificación IMDb de al menos 8.5.

  • $setWindowFields divide los documentos por year.

  • window: { documents: [ "unbounded", "unbounded" ] } abarca toda la partición del año, por lo que $topN considera todos los documentos del año al determinar las tres películas mejor calificadas.

  • $topN Utiliza sortBy: { "imdb.rating": -1, title: 1 } para clasificar las películas según su puntuación en IMDb y title como criterio de desempate. Todos los documentos del mismo año reciben el mismo valor topThreeRatedInYear.

  • $project Elimina los campos innecesarios para resaltar el resultado de la función de ventana.

  • $sort Ordena los resultados por año en orden ascendente y por calificación en orden descendente.

Califique esta página