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.
Docs Menu

$lastN (operador de acumulación)

$lastN

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:
{
input: <expression>,
n: <expression>
}
}
Campo
Tipo
Descripción

input

expresión

La expresión input se evalúa sobre cada documento del grupo de entrada y se conservan los últimos resultados n.

n

expresión

El número de elementos que $lastN devuelve del grupo. Para ver un ejemplo de cómo configurar n dinámicamente en función de la clave del grupo, consulte Configurar n en función de la clave del grupo.

  • $lastN no filtra los valores nulos.

  • $lastN convierte los valores faltantes en null.

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 $group ya están ordenados, debes usar $lastN.

  • Si estás ordenando y seleccionando los n elementos inferiores, entonces puedes usar $bottomN para realizar ambas tareas con un solo acumulador.

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.

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 $match para filtrar los resultados a películas donde Horror está incluido en el array genres, y donde year es un número entero.

  • Ordena los resultados por year en orden ascendente y luego por title alfabéticamente como criterio de desempate.

  • Agrupa todos los documentos resultantes en un único grupo.

  • Especifica los campos que son datos para $lastN con input : ["$title", "$year"].

  • Utiliza $lastN para devolver los últimos tres documentos (ordenados por año ascendente, con title como criterio de desempate) para el género Horror con n: 3.

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 $match para filtrar las películas donde year es un número entero.

  • Utiliza $unwind para crear un documento separado para cada género en el array genres.

  • Ordena los resultados por year en orden ascendente y luego por title alfabéticamente.

  • Utiliza $group para agrupar los resultados por genres.

  • Utiliza $lastN para devolver los tres últimos documentos (por año ascendente, con title como criterio de desempate) para cada género con n: 3.

  • Especifica los campos que son datos para $lastN con input : ["$title", "$year"].

  • Limita la salida a cinco documentos para mejorar la legibilidad.

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-13 o R, donde year es un número entero y title comienza 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 $cond para devolver las películas 3 para las películas con calificación PG y la película 1 para 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.