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.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$last (operador de acumulación)

$last

Devuelve el resultado de una expresión para el último documento en un grupo de documentos. Solo tiene sentido cuando los documentos están en un orden definido.

El acumulador $last está disponible en estas etapas:

Nota

Desambiguación

Esta página describe $last 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 $last en estos otros contextos:

{ $last: <expression> }

Para definir el orden de los documentos para $last en una etapa de agrupación, agregue una etapa $sort precedente.

Es posible que a los documentos de un grupo les falten campos. $last gestiona los valores faltantes de la siguiente manera:

  • Si no hay documentos de la etapa de pipeline anterior, la etapa $group no devuelve nada.

  • Cuando el expression del último documento del grupo se evalúa como un valor faltante, $last devuelve null.

Por ejemplo, considere los siguientes documentos en la colección badData, donde a algunos documentos les faltan campos:

db.badData.insertMany( [
{ "_id": 1, "price": 6, "quantity": 6 },
{ "_id": 2, "item": "album", "price": 5, "quantity": 5 },
{ "_id": 7, "item": "tape", "price": 6, "quantity": 6 },
{ "_id": 8, "price": 5, "quantity": 5 },
{ "_id": 9, "item": "album", "price": 3, "quantity": '' },
{ "_id": 10, "item": "tape", "price": 3, "quantity": 4 },
{ "_id": 12, "item": "cd", "price": 7 }
] )

Se puede hacer un query a la colección badData, agrupando la salida en el campo item:

db.badData.aggregate( [
{ $sort: { item: 1, price: 1 } },
{ $group:
{
_id: "$item",
inStock: { $last: "$quantity" }
}
}
] )

$last Selecciona el último documento de cada grupo de salida. Los documentos que no tienen el campo item se agrupan con un valor null para el campo _id. Cuando falta el campo acumulador (quantity en este ejemplo), $last devuelve null.

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.

El siguiente ejemplo ordena las películas por año y título, y luego las agrupa por género para encontrar la película más reciente estrenada en cada género:

db.movies.aggregate( [
{ $match: { year: { $type: "int" } } },
{ $sort: { year: 1, title: 1 } },
{ $unwind: "$genres" },
{
$group: {
_id: "$genres",
lastMovieTitle: { $last: "$title" },
lastMovieYear: { $last: "$year" }
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

En el pipeline anterior:

  • $match filtra las películas con un campo year de tipo entero. Esto elimina los datos erróneos donde year falta o no es un número.

  • $sort ordena las películas por year en orden ascendente, luego title en orden alfabético.

  • $unwind crea un documento separado para cada género en el array genres, manteniendo el orden de clasificación previamente establecido.

  • $group con $last devuelve el title y el year de la última película (la más reciente por año y la última por título en orden alfabético) para cada género.

  • Un segundo $sort ordena los resultados alfabéticamente por género.

  • $limit restringe la salida a los géneros 5.