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.
$primeroN
Nuevo a partir de la versión 8.0.1.
El $firstN operador de Amazon DocumentDB devuelve los primeros N elementos. Cuando se usa como acumulador en una $group etapa, devuelve una matriz con los primeros N valores de cada grupo. Cuando se usa como operador de expresión matricial, devuelve los primeros 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 $firstN acumulador para recuperar las dos primeras cantidades de cada artículo durante la agregación.
nota
$firstNselecciona los valores en el orden en que los documentos llegan al $group escenario. Para devolver los primeros 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", firstTwoQuantities: { $firstN: { input: "$quantity", n: 2 } } } } ]);
Salida
[
{ "_id": "abc", "firstTwoQuantities": [10, 5] },
{ "_id": "xyz", "firstTwoQuantities": [15, 7] }
]
Ejemplo de uso de expresiones (MongoDB Shell)
El $firstN operador también se puede usar como expresión dentro de una $project etapa para devolver los primeros 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: { firstThreeTags: { $firstN: { input: "$tags", n: 3 } } }} ]);
Salida
[
{ "_id": 1, "firstThreeTags": ["red", "green", "blue"] },
{ "_id": 2, "firstThreeTags": ["alpha", "beta", "gamma"] }
]
Ejemplo de uso de un operador de ventana (MongoDB Shell)
Nuevo a partir de la versión 8.0.2.
El $firstN operador también se puede utilizar como operador de ventanas en el $setWindowFields escenario. En este contexto, devuelve una matriz con hasta los primeros 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, $firstN 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 primeros precios desde el principio de la partición hasta el documento actual.
db.stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { firstTwoSoFar: { $firstN: { input: "$price", n: 2 }, window: { documents: ["unbounded", "current"] } } } } } ]);
Salida
[
{ "_id": 1, "ticker": "ABC", "hour": 1, "price": 50, "firstTwoSoFar": [50] },
{ "_id": 2, "ticker": "ABC", "hour": 2, "price": 45, "firstTwoSoFar": [50, 45] },
{ "_id": 3, "ticker": "ABC", "hour": 3, "price": 60, "firstTwoSoFar": [50, 45] },
{ "_id": 4, "ticker": "ABC", "hour": 4, "price": 40, "firstTwoSoFar": [50, 45] },
{ "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30, "firstTwoSoFar": [30] },
{ "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35, "firstTwoSoFar": [30, 35] },
{ "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25, "firstTwoSoFar": [30, 35] }
]
Cada documento se complementa con firstTwoSoFar los dos primeros price valores de su ventana (en hour orden).
Ejemplos de código
Para ver un ejemplo de código sobre el uso $firstN 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):