$reduce - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

$reduce

L'opérateur d'$reduceagrégation dans Amazon DocumentDB est utilisé pour appliquer une fonction de deux arguments cumulativement aux éléments d'un tableau afin de réduire le tableau à une seule valeur. Cet opérateur est particulièrement utile pour effectuer des calculs ou des transformations complexes sur des données matricielles au sein du pipeline d'agrégation.

Paramètres

  • input: le tableau à réduire.

  • initialValue: valeur initiale à utiliser dans l'opération de réduction.

  • in: expression à évaluer sur chaque élément du input tableau. Cette expression doit renvoyer une valeur qui sera utilisée lors de la prochaine itération de la réduction.

Exemple (MongoDB Shell)

L'exemple suivant montre comment utiliser l'$reduceopérateur pour calculer la somme de tous les éléments d'un tableau.

Création d'exemples de documents

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] } ])

Exemple de requête

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

Sortie

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

L'$reduceopérateur parcourt le items tableau en ajoutant chaque élément à initialValue 0. Le résultat est la somme de tous les éléments du tableau.

Exemples de code

Pour afficher un exemple de code d'utilisation de la $reduce commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

Node.js

Voici un exemple d'utilisation de l'$reduceopérateur dans une application 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

Voici un exemple d'utilisation de l'$reduceopérateur dans une application 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()