

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.

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

L'étape d'`$redact`agrégation dans Amazon DocumentDB est utilisée pour inclure ou exclure de manière sélective le contenu des documents de sortie en fonction des valeurs des champs spécifiés. Cela est particulièrement utile dans les scénarios où vous devez contrôler la visibilité des données sensibles en fonction des niveaux d'accès ou des autorisations des utilisateurs.

**Paramètres**
+ `$cond`: expression qui évalue soit pour `$$KEEP``$$PRUNE`, soit `$$DESCEND` pour chaque champ du document.
+ `$$KEEP`: conserve le champ actuel dans le document de sortie.
+ `$$PRUNE`: Supprime le champ actuel du document de sortie.
+ `$$DESCEND`: applique la `$redact` scène de manière récursive au champ actuel, qui est un objet ou un tableau.

## Exemple (MongoDB Shell)
<a name="redact-examples"></a>

Dans cet exemple, nous allons utiliser l'`$redact`étape pour filtrer les commandes en fonction de leur statut, en n'affichant que les commandes avec des valeurs de statut spécifiques.

**Création d'exemples de documents**

```
db.orders.insert([
  { "_id": 1, "status": "shipped", "customer": "Carlos Salazar", "total": 150.00, "date": "2025-01-15" },
  { "_id": 2, "status": "processing", "customer": "Saanvi Sarkar", "total": 89.99, "date": "2025-01-20" },
  { "_id": 3, "status": "cancelled", "customer": "Zhang Wei", "total": 220.50, "date": "2025-01-18" }
])
```

**Exemple de requête**

```
db.orders.aggregate([
  {
    $redact: {
      $cond: {
        if: { $in: ["$status", ["shipped", "processing"]] },
        then: "$$KEEP",
        else: "$$PRUNE"
      }
    }
  }
])
```

**Sortie**

```
[
  { _id: 1, status: 'shipped', customer: 'Carlos Salazar', total: 150, date: '2025-01-15' },
  { _id: 2, status: 'processing', customer: 'Saanvi Sarkar', total: 89.99, date: '2025-01-20' }
]
```

Dans cet exemple, l'`$redact`étape vérifie la valeur du `status` champ dans chaque document. S'il `status` est « expédié » ou « en cours de traitement », le document est conservé (`$$KEEP`). Dans le cas contraire, le document est élagué (`$$PRUNE`).

## Exemples de code
<a name="redact-code"></a>

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

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  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 collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $redact: {
        $cond: {
          if: { $in: ['$status', ['shipped', 'processing']] },
          then: '$$KEEP',
          else: '$$PRUNE'
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            '$redact': {
                '$cond': {
                    'if': { '$in': ['$status', ['shipped', 'processing']] },
                    'then': '$$KEEP',
                    'else': '$$PRUNE'
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------