MongoDB\Driver\Manager::executeBulkWriteCommand

(mongodb >=2.1.0)

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

Описание

final public 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, если выполнился успешно.

Ошибки

Примеры

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

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

<?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

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

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top