# Класс MongoDB\Driver\BulkWriteCommand

(mongodb >=2.1.0)

## Введение

Класс MongoDB\Driver\BulkWriteCommand собирает одну или набор операций записи, которые требуется отправить на сервер командой » bulkWrite, которая появилась в MongoDB 8.0. После добавления произвольного количества операций вставки, обновления и удаления команда готова к выполнению методом MongoDB\Driver\Manager::executeBulkWriteCommand().

В отличие от класса MongoDB\Driver\BulkWrite, в котором каждую операцию записи требуется нацелить на ту же коллекцию, каждая операция записи внутри объекта MongoDB\Driver\BulkWriteCommand умеет нацеливаться на другую коллекцию.

Операции записи по умолчанию отправляются на сервер в порядке добавления, но возможен и произвольный порядок. Упорядоченные операции записи отправляются на сервер для последовательного выполнения в заданном порядке. Остальные операции прерываются, если при записи возникла ошибка. Неупорядоченные операции отправляются на сервер в произвольном порядке и выполняются последовательно или параллельно — по усмотрению сервера. Об ошибках сообщается после обработки всех операций.

## Обзор класса

final class MongoDB\Driver\BulkWriteCommand implements Countable {
/* Методы */
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
}

## Примеры

Пример #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\Manager::executeBulkWriteCommand()
- MongoDB\Driver\BulkWriteCommandResult
- MongoDB\Driver\Exception\BulkWriteCommandException
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\WriteConcernError
- MongoDB\Driver\WriteError

## Содержание

- MongoDB\Driver\BulkWriteCommand::__construct — Создаёт новый объект BulkWriteCommand
- MongoDB\Driver\BulkWriteCommand::count — Подсчитывает количество операций записи в команде BulkWriteCommand
- MongoDB\Driver\BulkWriteCommand::deleteMany — Добавляет операцию deleteMany
- MongoDB\Driver\BulkWriteCommand::deleteOne — Добавляет операцию deleteOne
- MongoDB\Driver\BulkWriteCommand::insertOne — Добавляет операцию insertOne
- MongoDB\Driver\BulkWriteCommand::replaceOne — Добавляет операцию replaceOne
- MongoDB\Driver\BulkWriteCommand::updateMany — Добавляет операцию updateMany
- MongoDB\Driver\BulkWriteCommand::updateOne — Добавляет операцию updateOne

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