

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.

# \$1 fusion
<a name="merge"></a>

Introduit dans la version 8.0

L'étape d'`$merge`agrégation dans Amazon DocumentDB est utilisée pour fusionner les résultats de l'étape de pipeline précédente dans une collection cible. Cela est utile pour mettre à jour ou insérer des documents dans une collection cible en fonction des données des documents d'entrée.

L'`$merge`étape vous permet d'effectuer diverses actions en fonction de la condition de correspondance entre les documents d'entrée et la collection cible, telles que :

```
- Insert new documents
- Update existing documents
- Delete documents
- Fail the operation if there are any conflicts
```

**Paramètres**
+ `into`: (obligatoire) Le nom de la collection cible dans laquelle fusionner les documents d'entrée.
+ `on`: (obligatoire) Le ou les champs à utiliser comme condition de correspondance entre les documents d'entrée et la collection cible.
+ `whenMatched`: (facultatif) Action à effectuer lorsque le document d'entrée correspond à un document existant dans la collection cible. Les valeurs prises en charge sont `"merge"`, `"replace"`, `"keepExisting"` et `"fail"`.
+ `whenNotMatched`: (facultatif) Action à effectuer lorsque le document d'entrée ne correspond à aucun document de la collection cible. Les valeurs prises en charge sont les suivantes : `"insert"` et`"fail"`.

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

L'exemple suivant montre comment utiliser le `$merge` stage pour mettre à jour une `users` collection avec de nouvelles données provenant d'un pipeline d'entrée.

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

```
db.users.insertMany([
  { _id: 1, name: "John Doe", email: "john@example.com" },
  { _id: 2, name: "Jane Smith", email: "jane@example.com" }
]);

db.inputData.insertMany([
  { _id: 1, name: "John Doe", email: "john@example.com", phone: "123-456-7890" },
  { _id: 3, name: "Bob Johnson", email: "bob@example.com", phone: "987-654-3210" }
]);
```

**Exemple de requête**

```
db.inputData.aggregate([
  {
    $merge: {
      into: "users",
      on: "_id",
      whenMatched: "merge",
      whenNotMatched: "insert"
    }
  }
])
```

**Sortie**

Après avoir exécuté le `$merge` pipeline, la `users` collection contiendra les documents suivants :

```
[
  { _id: 1, name: "John Doe", email: "john@example.com", phone: "123-456-7890" },
  { _id: 2, name: "Jane Smith", email: "jane@example.com" },
  { _id: 3, name: "Bob Johnson", email: "bob@example.com", phone: "987-654-3210" }
]
```

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

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

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

Voici un exemple d'utilisation de l'opérateur \$1merge dans une application 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');

  await db.collection('inputData').aggregate([
    {
      $merge: {
        into: 'users',
        on: '_id',
        whenMatched: 'merge',
        whenNotMatched: 'insert'
      }
    }
  ]).toArray();

  const users = await db.collection('users').find({}).toArray();
  console.log(users);

  await client.close();
}

example();
```

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

Voici un exemple d'utilisation de l'opérateur \$1merge dans une application 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']

    # Assumes collections 'users' and 'inputData' already exist with sample data
    db.inputData.aggregate([
        {
            '$merge': {
                'into': 'users',
                'on': '_id',
                'whenMatched': 'merge',
                'whenNotMatched': 'insert'
            }
        }
    ])

    users = list(db.users.find({}))
    print(users)

    client.close()

example()
```

------