# La classe MongoDB\Driver\BulkWriteCommand

(mongodb >=2.1.0)

## Introduction

MongoDB\Driver\BulkWriteCommand récupère une ou plusieurs opérations d'écriture qui doivent être envoyées au serveur à l'aide de la commande » bulkWrite introduite dans MongoDB 8.0. Après avoir ajouté un nombre quelconque d'opérations d'écriture, d'opérations de modification et d'opérations de suppression, la commande peut être exécutée via MongoDB\Driver\Manager::executeBulkWriteCommand().

Contrairement à MongoDB\Driver\BulkWrite, où toutes les opérations d'écriture doivent cibler la même collection, chaque opération d'écriture dans MongoDB\Driver\BulkWriteCommand peut cibler une collection différente.

Les opérations d'écriture peuvent être triées (par défaut) ou non triées. Les opérations triées sont envoyées au serveur, dans l'ordre fourni, pour une exécution sérielle. Si une écriture échoue, toutes les opérations restantes seront annulées. Les opérations non triées sont envoyées au serveur dans un ordre arbitraire où elles peuvent être exécutées en parallèle. Toutes les erreurs qui se produisent sont signalées après que toutes les opérations ont été tentées.

## Synopsis de la classe

final class MongoDB\Driver\BulkWriteCommand implements Countable {
/* Méthodes */
public function __construct(?array `$options` = `null`)
public function count(): int
public function deleteMany(string `$namespace`, array|object `$filter`, ?array `$options` = `null`): void
public function deleteOne(string `$namespace`, array|object `$filter`, ?array `$options` = `null`): void
public function insertOne(string `$namespace`, array|object `$document`): mixed
public function replaceOne(
string `$namespace`,
array|object `$filter`,
array|object `$replacement`,
?array `$options` = `null`
): void
public function updateMany(
string `$namespace`,
array|object `$filter`,
array|object `$update`,
?array `$options` = `null`
): void
public function updateOne(
string `$namespace`,
array|object `$filter`,
array|object `$update`,
?array `$options` = `null`
): void
}

## Exemples

Exemple #1 Opérations d'écriture mixtes

Les opérations d'écriture mixtes (par exemple, insertions, mises à jour et suppressions) seront envoyées au serveur à l'aide d'une seule commande » bulkWrite.

    <?php

    $manager = new MongoDB\Driver\Manager;

    $bulk = new MongoDB\Driver\BulkWriteCommand;

    // Delete documents from both collections
    $bulk->deleteMany('db.coll_one', []);
    $bulk->deleteMany('db.coll_two', []);

    // Insert documents into two collections
    $bulk->insertOne('db.coll_one', ['_id' => 1]);
    $bulk->insertOne('db.coll_two', ['_id' => 2]);
    $bulk->insertOne('db.coll_two', ['_id' => 3]);

    // Update a document in "coll_one"
    $bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);

    $result = $manager->executeBulkWriteCommand($bulk);

    printf("%d document(s) ont été inséré(s)\n", $result->getInsertedCount());
    printf("%d document(s) ont été mis à jour(s)\n", $result->getModifiedCount());

    ?>

L'exemple ci-dessus va afficher :

    3 document(s) ont été inséré(s)
    1 document(s) ont été mis à jour(s)

Exemple #2 Opérations d'écriture ordonnées causant une erreur

    <?php

    $manager = new MongoDB\Driver\Manager;

    $bulk = new MongoDB\Driver\BulkWriteCommand;

    $bulk->deleteMany('db.coll', []);
    $bulk->insertOne('db.coll', ['_id' => 1]);
    $bulk->insertOne('db.coll', ['_id' => 2]);
    $bulk->insertOne('db.coll', ['_id' => 1]);
    $bulk->insertOne('db.coll', ['_id' => 3]);

    try {
        $result = $manager->executeBulkWriteCommand($bulk);
    } catch (MongoDB\Driver\Exception\BulkWriteCommandException $e) {
        $result = $e->getPartialResult();

        var_dump($e->getWriteErrors());
    }

    printf("%d document(s) ont été inséré(s)\n", $result->getInsertedCount());

    ?>

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

    array(1) {
      [3]=>
      object(MongoDB\Driver\WriteError)#5 (4) {
        ["message"]=>
        string(78) "E11000 duplicate key error collection: db.coll index: _id_ dup key: { _id: 1 }"
        ["code"]=>
        int(11000)
        ["index"]=>
        int(3)
        ["info"]=>
        object(stdClass)#6 (0) {
        }
      }
    }
    2 document(s) ont été inséré(s)

## Voir aussi

- MongoDB\Driver\Manager::executeBulkWriteCommand()
- MongoDB\Driver\BulkWriteCommandResult
- MongoDB\Driver\Exception\BulkWriteCommandException
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\WriteConcernError
- MongoDB\Driver\WriteError

## Sommaire

- MongoDB\Driver\BulkWriteCommand::__construct — Créer une nouvelle BulkWriteCommand
- MongoDB\Driver\BulkWriteCommand::count — Compte le nombre d'opérations d'écriture dans la BulkWriteCommand
- MongoDB\Driver\BulkWriteCommand::deleteMany — Ajoute une opération deleteMany
- MongoDB\Driver\BulkWriteCommand::deleteOne — Ajoute une opération deleteOne
- MongoDB\Driver\BulkWriteCommand::insertOne — Ajoute une opération insertOne
- MongoDB\Driver\BulkWriteCommand::replaceOne — Ajoute une opération replaceOne
- MongoDB\Driver\BulkWriteCommand::updateMany — Ajoute une opération updateMany
- MongoDB\Driver\BulkWriteCommand::updateOne — Ajoute une opération updateOne

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