

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.

# \$1reduce
<a name="reduce"></a>

L'opérateur d'`$reduce`agré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)
<a name="reduce-examples"></a>

L'exemple suivant montre comment utiliser l'`$reduce`opé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'`$reduce`opé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
<a name="reduce-code"></a>

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'`$reduce`opé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'`$reduce`opé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()
```

------