Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
$Último N
Nuevo a partir de la versión 8.0.1.
El $lastN operador de Amazon DocumentDB devuelve los últimos N elementos. Cuando se usa como acumulador en una $group etapa, devuelve una matriz con los últimos N valores de cada grupo. Cuando se usa como operador de expresión matricial, devuelve los últimos N elementos de una matriz.
Parámetros
-
input: la expresión que se convierte en el campo o la matriz desde los que se devuelven los valores. -
n: un entero positivo que especifica cuántos valores se devolverán. Cuando se usa como acumulador en una$groupetapa, tambiénnpuede ser una expresión, siempre que se resuelva como un entero positivo según el campo del grupo_id.
Ejemplo (MongoDB Shell)
El siguiente ejemplo muestra cómo usar el $lastN acumulador para recuperar las dos últimas cantidades de cada artículo durante la agregación.
nota
$lastNselecciona los valores en el orden en que los documentos llegan al $group escenario. Para devolver los últimos N valores de un orden específico (por ejemplo, por fecha o puntuación), añada una $sort etapa antes$group.
Crea documentos de muestra
db.sales.insertMany([ { item: "abc", quantity: 10, date: ISODate("2023-01-01") }, { item: "abc", quantity: 5, date: ISODate("2023-01-02") }, { item: "abc", quantity: 8, date: ISODate("2023-01-03") }, { item: "xyz", quantity: 15, date: ISODate("2023-01-01") }, { item: "xyz", quantity: 7, date: ISODate("2023-01-02") }, { item: "xyz", quantity: 3, date: ISODate("2023-01-03") } ]);
Ejemplo de consulta
db.sales.aggregate([ { $group: { _id: "$item", lastTwoQuantities: { $lastN: { input: "$quantity", n: 2 } } } } ]);
Salida
[
{ "_id": "abc", "lastTwoQuantities": [5, 8] },
{ "_id": "xyz", "lastTwoQuantities": [7, 3] }
]
Ejemplo de uso de expresiones (MongoDB Shell)
El $lastN operador también se puede usar como expresión dentro de una $project etapa para devolver los últimos N elementos de un campo matricial.
Crea documentos de muestra
db.inventory.insertMany([ { _id: 1, item: "abc", tags: ["red", "green", "blue", "yellow", "purple"] }, { _id: 2, item: "xyz", tags: ["alpha", "beta", "gamma"] } ]);
Ejemplo de consulta
db.inventory.aggregate([ { $project: { lastThreeTags: { $lastN: { input: "$tags", n: 3 } } }} ]);
Salida
[
{ "_id": 1, "lastThreeTags": ["blue", "yellow", "purple"] },
{ "_id": 2, "lastThreeTags": ["alpha", "beta", "gamma"] }
]
Ejemplo de uso de un operador de ventana (MongoDB Shell)
Nuevo a partir de la versión 8.0.2.
El $lastN operador también se puede utilizar como operador de ventanas en el $setWindowFields escenario. En este contexto, devuelve una matriz con hasta los últimos n valores de los documentos de cada ventana. Especifique el operador en el output campo y, si lo desea, defina los límites de la ventana con un window documento.
nota
Cuando se usa como operador de ventana en$setWindowFields, $lastN está limitado a 100 MB de datos intermedios. Una operación que supera este límite devuelve un error.
Crea documentos de muestra
db.stockPrices.insertMany([ { _id: 1, ticker: "ABC", hour: 1, price: 50 }, { _id: 2, ticker: "ABC", hour: 2, price: 45 }, { _id: 3, ticker: "ABC", hour: 3, price: 60 }, { _id: 4, ticker: "ABC", hour: 4, price: 40 }, { _id: 5, ticker: "XYZ", hour: 1, price: 30 }, { _id: 6, ticker: "XYZ", hour: 2, price: 35 }, { _id: 7, ticker: "XYZ", hour: 3, price: 25 } ]);
Ejemplo de consulta
En el ejemplo siguiente se dividen los documentosticker, se ordenan las hour particiones y se devuelven los dos precios más recientes vistos desde el principio de la partición hasta el documento actual.
db.stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { lastTwoSoFar: { $lastN: { input: "$price", n: 2 }, window: { documents: ["unbounded", "current"] } } } } } ]);
Salida
[
{ "_id": 1, "ticker": "ABC", "hour": 1, "price": 50, "lastTwoSoFar": [50] },
{ "_id": 2, "ticker": "ABC", "hour": 2, "price": 45, "lastTwoSoFar": [50, 45] },
{ "_id": 3, "ticker": "ABC", "hour": 3, "price": 60, "lastTwoSoFar": [45, 60] },
{ "_id": 4, "ticker": "ABC", "hour": 4, "price": 40, "lastTwoSoFar": [60, 40] },
{ "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30, "lastTwoSoFar": [30] },
{ "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35, "lastTwoSoFar": [30, 35] },
{ "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25, "lastTwoSoFar": [35, 25] }
]
Cada documento se complementa con lastTwoSoFar los dos últimos price valores de su ventana (en hour orden).
Ejemplos de código
Para ver un ejemplo de código sobre el uso $lastN del operador, seleccione la pestaña correspondiente al idioma que desee utilizar. Los siguientes ejemplos muestran el uso del acumulador (in$group), el uso de expresiones (in$project) y el uso del operador de ventana (in$setWindowFields):