Definición
Devuelve el elemento superior dentro de una ventana según el orden de clasificación especificado.
Nota
Desambiguación
Esta página describe $top cuando se usa como función de ventana. También puede usar $top en estos otros contextos:
$top (expression operator), que devuelve el elemento superior de una matriz según un orden de clasificación especificado.$top (accumulator), que devuelve el elemento superior dentro de un grupo según el orden de clasificación especificado.
Sintaxis
{ $setWindowFields: { ... output: { <field>: { $top: { sortBy: { <field1>: <sort order>, <field2>: <sort order> ... }, output: <expression> } } } } }
Campo | Necesidad | Descripción |
|---|---|---|
sortBy | Requerido | Define el orden de clasificación de los elementos dentro de la ventana, con una sintaxis similar a |
salida | Requerido | Especifica la salida para cada elemento de la ventana. Puede ser cualquier expresión. |
Comportamiento
La función de ventana $top tiene los siguientes comportamientos para valores nulos y faltantes:
$topno filtra los valores nulos.$topconvierte los valores faltantes en null.
Ejemplo
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 la película mejor valorada del año a través de una ventana.
Este ejemplo utiliza $top como función de ventana para identificar la película mejor valorada del mismo año para cada documento de película. El conjunto de datos se filtra para incluir solo películas familiares con clasificación PG de 1980–1982.
db.movies.aggregate( [ { $match: { year: { $in: [ 1980, 1981, 1982 ] }, "imdb.rating": { $exists: true, $ne: null }, genres: "Family", rated: "PG" } }, { $setWindowFields: { partitionBy: "$year", output: { highestRatedInYear: { $top: { output: { title: "$title", rating: "$imdb.rating" }, sortBy: { "imdb.rating": -1 } }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, rating: "$imdb.rating", highestRatedInYear: 1 } }, { $limit: 10 } ] )
En este ejemplo:
$setWindowFieldsdivide los documentos poryear.La ventana abarca desde
unboundedhastaunbounded, lo que significa que$topconsidera todos los documentos en la partición al determinar la película mejor calificada.$topDevuelve la película mejor valorada en cada partición como un documento incrustado que contiene los campostitleyrating.$projectincluye solo los campostitle,year,ratingyhighestRatedInYearen la salida.$limitlimita la salida a documentos 10.
Este método conserva todos los documentos individuales de las películas e incluye una referencia a la película más taquillera de cada año.