MongoDB\Driver\Manager::executeBulkWriteCommand

Execute write operations using the bulkWrite command

&reftitle.description; final public `MongoDB\Driver\BulkWriteCommandResult` `MongoDB\Driver\Manager::executeBulkWriteCommand` `MongoDB\Driver\BulkWriteCommand` `bulk` ``array``null```options`&null;

Executes one or more write operations on the primary server using the bulkWrite command introduced in MongoDB 8.0.

A `MongoDB\Driver\BulkWriteCommand` can be constructed with one or more write operations of varying types (e.g. inserts, updates, and deletes). Each write operation may target a different collection.

The default value for the `"writeConcern"` option will be inferred from an active transaction (indicated by the `"session"` option), followed by the connection URI.

&reftitle.parameters;
&mongodb.parameter.bulkwritecommand;

`options`

- ## options

  Option | Type | Description
  &mongodb.option.session; &mongodb.option.writeConcern;

&reftitle.returnvalues; &mongodb.returns.bulkwritecommandresult;
&reftitle.errors;

- Throws `MongoDB\Driver\Exception\InvalidArgumentException` if `bulk` does not contain any write operations.
- Throws `MongoDB\Driver\Exception\InvalidArgumentException` if `bulk` has already been executed. `MongoDB\Driver\BulkWriteCommand` objects may not be executed multiple times.
&mongodb.throws.session-unacknowledged; &mongodb.throws.std; &mongodb.throws.bulkwritecommandexception;
- Throws `MongoDB\Driver\Exception\RuntimeException` on other errors.

&reftitle.examples;

### Mixed write operations

Mixed write operations (i.e. inserts, updates, and deletes) will be sent to the server using a single bulkWrite command.

    <?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("Inserted %d document(s)\n", $result->getInsertedCount());
    printf("Updated  %d document(s)\n", $result->getModifiedCount());

    ?>

&example.outputs;

    Inserted 3 document(s)
    Updated  1 document(s)

### Ordered write operations causing an error

    <?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("Inserted %d document(s)\n", $result->getInsertedCount());

    ?>

&example.outputs.similar;

    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) {
        }
      }
    }
    Inserted 2 document(s)

&reftitle.seealso;

- `MongoDB\Driver\BulkWriteCommand`
- `MongoDB\Driver\BulkWriteCommandResult`
- `MongoDB\Driver\WriteConcern`
- `MongoDB\Driver\Server::executeBulkWriteCommand`