Exécute une ou plusieurs opérations d'écriture

# MongoDB\Driver\Manager::executeBulkWrite

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeBulkWrite — Exécute une ou plusieurs opérations d'écriture

### Description

final public function MongoDB\Driver\Manager::executeBulkWrite(string `$namespace`, MongoDB\Driver\BulkWrite `$bulk`, ?array `$options` = `null`): MongoDB\Driver\WriteResult

Exécute une ou plusieurs opérations d'écriture sur le serveur primaire.

Un MongoDB\Driver\BulkWrite peut être construit avec une ou plusieurs opérations d'écriture de types variés (par exemple, mises à jour, suppressions et insertions). Le pilote tentera d'envoyer les opérations du même type au serveur en aussi peu de requêtes que possible pour optimiser les allers-retours.

La valeur par défaut de l'option `"writeConcern"` sera déduite à partir d'une transaction active (indiquée par l'option `"session"`), suivie de l' URI de connexion.

### Liste de paramètres

`namespace` (string)
  Un espace de noms totalement qualifié (e.g. `"databaseName.collectionName"`)
`bulk` (MongoDB\Driver\BulkWrite)
  Écriture(s) à exécuter.
`options`

  options
  Option | Type | Description
  --- | --- | ---
  session | MongoDB\Driver\Session | Une session à associer à l'opération.
  writeConcern | MongoDB\Driver\WriteConcern | Une préoccupation d'écriture à appliquer à l'opération.

### Valeurs de retour

Retourne un MongoDB\Driver\WriteResult en cas de succès.

### Erreurs / Exceptions

- Lance une MongoDB\Driver\Exception\InvalidArgumentException si `bulk` ne contient aucune opération d'écriture.
- Lance une MongoDB\Driver\Exception\InvalidArgumentException si `bulk` a déjà été exécuté. Les objets MongoDB\Driver\BulkWrite ne peuvent pas être exécutés plusieurs fois.
- Lance une exception MongoDB\Driver\Exception\InvalidArgumentException si l'option `"session"` est utilisée conjointement avec une préoccupation d'écriture non reconnu.
- Lance une exception MongoDB\Driver\AuthenticationException si une identification est nécessaire mais qu'elle échoue
- Lance une exception MongoDB\Driver\ConnectionException si la connexion au serveur échoue pour une autre raison qu'en raison d'un problème d'identification
- Lance une exception MongoDB\Driver\BulkWriteException lors d'une erreur d'une opération en écriture (une erreur WriteError et WriteConcern)
- Lance une MongoDB\Driver\Exception\RuntimeException sur d'autres erreurs.

### Historique

Version | Description
--- | ---
PECL mongodb 2.0.0 | Le paramètre `options` n'accepte plus une instance de MongoDB\Driver\WriteConcern.
PECL mongodb 1.21.0 | Passer un objet MongoDB\Driver\WriteConcern en tant qu'`options` est obsolète et sera supprimé dans la 2.0.
PECL mongodb 1.4.4 | Une MongoDB\Driver\Exception\InvalidArgumentException sera lancée si l'option `"session"` est utilisée en combinaison avec un `"writeConcern"` non-acknowledged.
PECL mongodb 1.4.0 | Le troisième paramètre est maintenant un tableau d'`options`. Pour des raisons de compatibilité ascendante, ce paramètre acceptera toujours un objet MongoDB\Driver\WriteConcern.
PECL mongodb 1.3.0 | Une MongoDB\Driver\Exception\InvalidArgumentException est maintenant lancée si `bulk` ne contient aucune opération d'écriture. Précédemment, une MongoDB\Driver\Exception\BulkWriteException était lancée.

### Exemples

Exemple #1 Exemple de MongoDB\Driver\Manager::executeBulkWrite()

    <?php

    $bulk = new MongoDB\Driver\BulkWrite();

    $bulk->insert(['_id' => 1, 'x' => 1]);
    $bulk->insert(['_id' => 2, 'x' => 2]);

    $bulk->update(['x' => 2], ['$set' => ['x' => 1]], ['multi' => false, 'upsert' => false]);
    $bulk->update(['x' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
    $bulk->update(['_id' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);

    $bulk->insert(['_id' => 4, 'x' => 2]);

    $bulk->delete(['x' => 1], ['limit' => 1]);

    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
    $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);
    $result = $manager->executeBulkWrite('db.collection', $bulk, ['writeConcern' => $writeConcern]);

    printf("Inserted %d document(s)\n", $result->getInsertedCount());
    printf("Matched  %d document(s)\n", $result->getMatchedCount());
    printf("Updated  %d document(s)\n", $result->getModifiedCount());
    printf("Upserted %d document(s)\n", $result->getUpsertedCount());
    printf("Deleted  %d document(s)\n", $result->getDeletedCount());

    foreach ($result->getUpsertedIds() as $index => $id) {
        printf('upsertedId[%d]: ', $index);
        var_dump($id);
    }

    /* Si le WriteConcern n'a pas pu être satisfait */
    if ($writeConcernError = $result->getWriteConcernError()) {
        printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true));
    }

    /* Si une écriture n'a pas pu se faire du tout */
    foreach ($result->getWriteErrors() as $writeError) {
        printf("Operation#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode());
    }
    ?>

Résultat de l'exemple ci-dessus est similaire à :

    Inserted 3 document(s)
    Matched  1 document(s)
    Updated  1 document(s)
    Upserted 2 document(s)
    Deleted  1 document(s)
    upsertedId[3]: object(MongoDB\BSON\ObjectId)#5 (1) {
      ["oid"]=>
      string(24) "54d3adc3ce7a792f4d703756"
    }
    upsertedId[4]: int(3)

### Voir aussi

- MongoDB\Driver\BulkWrite
- MongoDB\Driver\WriteResult
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\Server::executeBulkWrite() - Exécute une ou plusieurs opérations d'écriture sur ce serveur

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open