Definición
$topNNuevo en la versión 8.3.
Devuelve los
nprimeros elementos de un array según el orden de clasificación especificado. Si el array contiene menos denelementos,$topNdevuelve todos los elementos del array.
Nota
Desambiguación
Esta página describe el operador de expresión $topN. Para el operador acumulador $topN, consulte $topN (operador acumulador).
Sintaxis
Cuando se utiliza como operador de expresión, $topN tiene la siguiente sintaxis:
{ $topN: { n: <expression>, sortBy: <expression>, input: <expression> } }
Campo | Necesidad | Descripción |
|---|---|---|
n | Requerido | El número de elementos del array que se van a devolver. |
sortBy | Requerido | Especifica el orden de los resultados. Consulte Comportamiento de |
entrada | Requerido | El array que |
Comportamiento
Comportamiento de ordenación
MongoDB ordena el array input en función del valor sortBy. La siguiente tabla proporciona ejemplos de diferentes opciones de ordenación:
input | sortBy | Ordenado input | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| | ||||||||||
|
| | ||||||||||
|
| |
Input Values
El campo input debe ser un array. Si especifica un input que no sea un array, MongoDB generará un error.
Ejemplo
El siguiente ejemplo utiliza la colección movies de la Conjunto de datos de ejemplo sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación, consulte Cargar el conjunto de datos de ejemplo.
La colección movies contiene documentos que se asemejan al siguiente ejemplo:
{ _id: ObjectId('573a1396f29313caabce4a9a'), year: 1972, genres: [ 'Crime', 'Drama' ], title: 'The Godfather', cast: [ 'Marlon Brando', 'Al Pacino', 'James Caan', 'Richard S. Castellano' ], directors: [ 'Francis Ford Coppola' ], runtime: 175, ... }
La siguiente canalización de agregación utiliza $topN en el array cast:
db.movies.aggregate([ { $match: { title: "The Godfather" } }, { $project: { _id: 0, title: 1, firstThreeCastMembersAlphabetically: { $topN: { n: 3, sortBy: 1, input: "$cast" } } } } ])
[ { title: 'The Godfather', firstThreeCastMembersAlphabetically: [ 'Al Pacino', 'James Caan', 'Marlon Brando' ] } ]
En este ejemplo, $topN ordena el array cast existente en orden alfabético ascendente y devuelve los tres primeros valores.