$reduce - Amazon DocumentDB

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.

$reduce

El operador de $reduce agregación de Amazon DocumentDB se utiliza para aplicar una función de dos argumentos de forma acumulativa a los elementos de una matriz con el fin de reducir la matriz a un único valor. Este operador es particularmente útil para realizar cálculos o transformaciones complejos en los datos de una matriz dentro del proceso de agregación.

Parámetros

  • input: La matriz que se va a reducir.

  • initialValue: El valor inicial que se utilizará en la operación de reducción.

  • in: la expresión que se va a evaluar en cada elemento de la input matriz. Esta expresión debe devolver un valor que se utilizará en la siguiente iteración de la reducción.

Ejemplo (MongoDB Shell)

El siguiente ejemplo muestra cómo utilizar el $reduce operador para calcular la suma de todos los elementos de una matriz.

Cree documentos de muestra

db.orders.insertMany([ { "_id": 1, "items": [1, 2, 3, 4, 5] }, { "_id": 2, "items": [10, 20, 30] }, { "_id": 3, "items": [5, 15, 25, 35] }, { "_id": 4, "items": [100, 200] } ])

Ejemplo de consulta

db.orders.aggregate([ { $project: { total: { $reduce: { input: "$items", initialValue: 0, in: { $add: ["$$value", "$$this"] } } } } } ])

Salida

[ { "_id": 1, "total": 15 }, { "_id": 2, "total": 60 }, { "_id": 3, "total": 80 }, { "_id": 4, "total": 300 } ]

El $reduce operador itera sobre la items matriz, añadiendo cada elemento a initialValue 0. El resultado es la suma de todos los elementos de la matriz.

Ejemplos de código

Para ver un ejemplo de código para usar el $reduce comando, elija la pestaña correspondiente al idioma que desee usar:

Node.js

A continuación, se muestra un ejemplo del uso del $reduce operador en una aplicación de Node.js:

const { MongoClient } = require("mongodb"); async function main() { const client = await MongoClient.connect("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false"); const db = client.db("test"); const orders = db.collection("orders"); const result = await orders.aggregate([ { $project: { total: { $reduce: { input: "$items", initialValue: 0, in: { $add: ["$$value", "$$this"] } } } } } ]).toArray(); console.log(result); await client.close(); } main();
Python

Este es un ejemplo del uso del $reduce operador en una aplicación de Python:

from pymongo import MongoClient def main(): client = MongoClient("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false") db = client["test"] orders = db["orders"] result = list(orders.aggregate([ { "$project": { "total": { "$reduce": { "input": "$items", "initialValue": 0, "in": { "$add": ["$$value", "$$this"] } } } } } ])) print(result) client.close() if __name__ == "__main__": main()