Definición
Devuelve el resultado de evaluar una expresión específica sobre los últimos 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, $lastN devuelve todos los elementos del grupo.
El acumulador $lastN está disponible en estas etapas:
Nota
Desambiguación
Esta página describe el uso de $lastN 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 $lastN en estos otros contextos:
$lastN (expression), que devuelve el número especificado de elementos desde el final de una matriz.$lastN (window function), que se utiliza en la etapa$setWindowFieldspara devolver los últimosnvalores de los documentos en una ventana en particular.
Sintaxis
{ $lastN: { 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
$lastNno filtra los valores nulos.$lastNconvierte los valores faltantes en null.
Comparación de $lastN y $bottomN
Puedes usar $lastN y $bottomN para devolver los últimos n elementos de un grupo. Sin embargo, la diferencia en cuándo usar cada uno depende de si tus documentos de entrada ya están ordenados.
Si los documentos que ingresan a
$groupya están ordenados, debes usar$lastN.Si estás ordenando y seleccionando los
nelementos inferiores, entonces puedes usar$bottomNpara realizar 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 últimas tres películas de un mismo género.
Puedes usar el acumulador $lastN para encontrar las películas estrenadas más recientemente en un género en particular.
db.movies.aggregate( [ { $match: { genres: "Horror", year: { $type: "int" } } }, { $sort: { year: 1, title: 1 } }, { $group: { _id: "Horror", lastThreeMovies: { $lastN: { input: [ "$title", "$year" ], n: 3 } } } } ] )
La tubería precedente:
Utiliza
$matchpara filtrar los resultados a películas dondeHorrorestá incluido en el arraygenres, y dondeyeares un número entero.Ordena los resultados por
yearen orden ascendente y luego portitlealfabéticamente como criterio de desempate.Agrupa todos los documentos resultantes en un único grupo.
Especifica los campos que son datos para
$lastNconinput : ["$title", "$year"].Utiliza
$lastNpara devolver los últimos tres documentos (ordenados por año ascendente, contitlecomo criterio de desempate) para el géneroHorrorconn: 3.
Encuentra las últimas tres películas de múltiples géneros.
Puedes usar el acumulador $lastN para encontrar los últimos campos de entrada n en cada género.
db.movies.aggregate( [ { $match: { year: { $type: "int" } } }, { $unwind: "$genres" }, { $sort: { year: 1, title: 1 } }, { $group: { _id: "$genres", movies: { $lastN: { input: [ "$title", "$year" ], n: 3 } } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
La tubería precedente:
Utiliza
$matchpara filtrar las películas dondeyeares un número entero.Utiliza
$unwindpara crear un documento separado para cada género en el arraygenres.Ordena los resultados por
yearen orden ascendente y luego portitlealfabéticamente.Utiliza
$grouppara agrupar los resultados porgenres.Utiliza
$lastNpara devolver los tres últimos documentos (por año ascendente, contitlecomo criterio de desempate) para cada género conn: 3.Especifica los campos que son datos para
$lastNconinput : ["$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" ] }, year: { $type: "int" }, title: { $regex: "^[A-Za-z0-9]" } } }, { $sort: { title: 1 } }, { $group: { _id: { rated: "$rated" }, movies: { $lastN: { input: "$title", n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } } } } } }, { $sort: { "_id.rated": 1 } } ] )
La tubería precedente:
Filtros para películas con clasificaciones de contenido de
G,PG,PG-13oR, dondeyeares un número entero ytitlecomienza con un carácter alfanumérico.Ordena los resultados alfabéticamente por
title.Agrupa las películas por
rated(la clasificación por contenido).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.