Definición
Devuelve una agregación de los primeros n elementos de un grupo. Los resultados solo son válidos si los datos de entrada a la etapa de agrupación tienen un orden de clasificación definido. Si el grupo contiene menos de n elementos, $firstN devuelve todos los elementos del grupo.
El acumulador $firstN está disponible en estas etapas:
Nota
Desambiguación
Esta página describe $firstN cuando se utiliza como acumulador. Los acumuladores devuelven un único valor agregado, como la suma, el máximo o el mínimo, de un grupo de documentos de entrada.
También puedes usar $firstN en estos otros contextos:
$firstN (expression), que devuelve el número especificado de elementos desde el principio de una matriz.$firstN (window function), que se utiliza en la etapa$setWindowFieldspara devolver los primerosnvalores de los documentos en una ventana en particular.
Sintaxis
{ $firstN: { input: <expression>, n: <expression> } }
opciones
Campo | Tipo | Descripción |
|---|---|---|
| expresión | La expresión |
| expresión | El número de elementos que |
Comportamiento
Valores nulos y faltantes
$firstNno filtra los valores nulos.$firstNconvierte los valores faltantes en null.
Comparación de $firstN y $topN
Tanto los acumuladores $firstN como los $topN pueden lograr resultados similares.
En general:
Si los documentos que ingresan a
$groupya están ordenados, debes usar$firstN.Si está clasificando y seleccionando los
nelementos principales, entonces puede usar$topNpara lograr ambas tareas con un solo acumulador.
Ejemplos
Los ejemplos de esta página utilizan la colección movies del conjunto de datos de ejemplo sample_mflix. Para aprender a cargar el conjunto de datos de ejemplo en su implementación de MongoDB, consulte Importar datos de ejemplo en su implementación de Atlas.
Encuentra las tres primeras películas de un mismo género.
Puedes usar el acumulador $firstN para encontrar las tres primeras películas de un mismo género.
db.movies.aggregate( [ { $match: { genres: "Horror" } }, { $sort: { year: 1 } }, { $group: { _id: "Horror", firstThreeMovies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } } ] )
La tubería precedente:
Utiliza
$matchpara filtrar los resultados a películas dondeHorrorestá incluido en el arraygenres.Ordena los resultados por
yearen orden ascendente.Agrupa todos los documentos resultantes en un único grupo.
Especifica los campos que son datos para
$firstNconinput : ["$title", "$year"].Utiliza
$firstNpara devolver los tres primeros documentos del géneroHorrorconn: 3.
Encuentra las tres primeras películas de diversos géneros.
Puedes usar el acumulador $firstN para encontrar los primeros n campos de entrada en cada género.
db.movies.aggregate( [ { $unwind: "$genres" }, { $sort: { year: 1 } }, { $group: { _id: "$genres", movies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
La tubería precedente:
Utiliza
$unwindpara crear un documento separado para cada género en el arraygenres.Ordena los resultados por
yearen orden ascendente.Utiliza
$grouppara agrupar los resultados porgenres.Utiliza
$firstNpara devolver los tres primeros documentos de cada género conn: 3.Especifica los campos que son datos para
$firstNconinput : ["$title", "$year"].Limita la salida a cinco documentos para mejorar la legibilidad.
Establecer n en función de la clave de grupo.
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 rated para cambiar el valor de n:
db.movies.aggregate([ { $match: { rated: { $in: ["G", "PG", "PG-13", "R"] } } }, { $sort: { title: 1 } }, { $group: { _id: {"rated": "$rated"}, movies: { $firstN: { input: "$title", n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } } } } } } ] )
La tubería precedente:
Filtros para películas con calificaciones de
G,PG,PG-13oR.Ordena los resultados alfabéticamente por
title.Agrupa las películas por
rated(la calificación de la película).Utiliza la expresión
$condpara devolver las películas3para las películas con calificaciónPGy la película1para todas las demás calificaciones.
En la salida, la calificación PG devuelve 3 películas, mientras que las calificaciones G, PG-13 y R devuelven cada una 1 película.