Выполняет операции записи через команду bulkWrite

# MongoDB\Driver\Manager::executeBulkWriteCommand

(mongodb >=2.1.0)

MongoDB\Driver\Manager::executeBulkWriteCommand — Выполняет операции записи через команду bulkWrite

### Описание

final public function MongoDB\Driver\Manager::executeBulkWriteCommand(MongoDB\Driver\BulkWriteCommand `$bulk`, ?array `$options` = `null`): MongoDB\Driver\BulkWriteCommandResult

Метод выполняет одну или несколько операций записи на первичном сервере через команду » bulkWrite, которая появилась в MongoDB 8.0.

Объект класса MongoDB\Driver\BulkWriteCommand создают с одной или несколькими операциями записи: вставки, обновления или удаления. Каждую операцию записи возможно нацелить на разные коллекции.

Значение по умолчанию для опции `"writeConcern"` автоматически определяется на основе активной транзакции или URI-идентификатора соединения, если транзакция не содержит значения. На активную транзакцию указывает опция `"session"`.

### Список параметров

`bulk` (MongoDB\Driver\BulkWriteCommand)
  Одна или несколько операций записи для выполнения.
`options`

  Опции
  Опция | Тип | Описание
  --- | --- | ---
  session | MongoDB\Driver\Session | Сессия для связывания с операцией.
  writeConcern | MongoDB\Driver\WriteConcern | Гарантия записи для применения к операции.

### Возвращаемые значения

Метод возвращает объект класса MongoDB\Driver\BulkWriteCommandResult, если выполнился успешно.

### Ошибки

- Метод выбрасывает исключение MongoDB\Driver\Exception\InvalidArgumentException, если параметр `bulk` не содержит ни одной операции записи.
- Метод выбрасывает исключение MongoDB\Driver\Exception\InvalidArgumentException, если операции в параметре `bulk` уже выполнились. Объекты MongoDB\Driver\BulkWriteCommand невозможно выполнить многократно.
- Выбрасывается MongoDB\Driver\Exception\InvalidArgumentException, если опция `"session"` указана в сочетании с неподтверждённой гарантией записи.
- При ошибке парсинга аргумента метод выбрасывает исключение MongoDB\Driver\Exception\InvalidArgumentException.
- При неудачном соединении с сервером (кроме ошибок аутентификации) метод выбрасывает исключение MongoDB\Driver\Exception\ConnectionException.
- При неудачной аутентификации метод выбрасывает исключение MongoDB\Driver\Exception\AuthenticationException.
- Метод выбрасывает исключение MongoDB\Driver\Exception\BulkWriteCommandException при ошибках записи наподобие сбоя команды, ошибки записи или ошибки подтверждения записи.
- При других ошибках метод выбрасывает исключение MongoDB\Driver\Exception\RuntimeException.

### Примеры

Пример #1 Пример смешанных операций записи

Смешанные операции записи наподобие вставки, обновления или удаления отправляются на сервер одной командой » bulkWrite.

    <?php

    $manager = new MongoDB\Driver\Manager();

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

    // Удалить документы из обеих коллекций
    $bulk->deleteMany('db.coll_one', []);
    $bulk->deleteMany('db.coll_two', []);

    // Вставить документы в две коллекции
    $bulk->insertOne('db.coll_one', ['_id' => 1]);
    $bulk->insertOne('db.coll_two', ['_id' => 2]);
    $bulk->insertOne('db.coll_two', ['_id' => 3]);

    // Обновить документ в столбце "coll_one"
    $bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);

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

    printf("Количество операций вставки документов: %d\n", $result->getInsertedCount());
    printf("Количество операций обновления документов: %d\n", $result->getModifiedCount());

    ?>

Результат выполнения приведённого примера:

    Количество операций вставки документов: 3
    Количество операций обновления документов: 1

Пример #2 Пример упорядоченных операций записи, которые вызывают ошибку

    <?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\n", $result->getInsertedCount());

    ?>

Вывод приведённого примера будет похож на:

    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

### Смотрите также

- MongoDB\Driver\BulkWriteCommand
- MongoDB\Driver\BulkWriteCommandResult
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\Server::executeBulkWriteCommand() - Выполняет операции записи на текущем сервере командой bulkWrite

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