MongoDB\Driver\Manager::executeBulkWrite

(mongodb >=1.0.0)

MongoDB\Driver\Manager::executeBulkWriteВыполняет одну или несколько операций записи

Описание

final public MongoDB\Driver\Manager::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $bulk, array|MongoDB\Driver\WriteConcern|null $options = null): MongoDB\Driver\WriteResult

Выполняет одну или несколько операций записи на основном сервере.

Объект класса MongoDB\Driver\BulkWrite можно создавать с одной или несколькими операциями записи различного типа (например, обновлениями, удалениями и вставками). Драйвер попытается отправить операции одного и того же типа на сервер с минимальным количества запросов, чтобы сократить обращения к серверу.

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

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

namespace (string)

Полностью определённое имя (т.е. "databaseName.collectionName").

bulk (MongoDB\Driver\BulkWrite)

Записи для выполнения.

опции

options
Опция Тип Описание
session MongoDB\Driver\Session

Сессия для связывания с операцией.

writeConcern MongoDB\Driver\WriteConcern

Гарантия записи для применения к операции.

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

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

Ошибки

Список изменений

Версия Описание
PECL mongodb 1.4.4 Если опция session используется в сочетании с неподтверждённой гарантией записи, выбрасывается исключение MongoDB\Driver\Exception\InvalidArgumentException.
PECL mongodb 1.4.0 Третий параметр options теперь массив. Для обратной совместимости этот параметр ещё принимает объект MongoDB\Driver\WriteConcern.
PECL mongodb 1.3.0 Теперь выбрасывается исключение MongoDB\Driver\Exception\InvalidArgumentException, если параметр bulk не содержит операций записи. Ранее выбрасывалось исключение MongoDB\Driver\Exception\BulkWriteException.

Примеры

Пример #1 Пример использования метода MongoDB\Driver\Manager::executeBulkWrite()

<?php

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

$bulk->insert(['_id' => 1, 'x' => 1]);
$bulk->insert(['_id' => 2, 'x' => 2]);

$bulk->update(['x' => 2], ['$set' => ['x' => 1]], ['multi' => false, 'upsert' => false]);
$bulk->update(['x' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->update(['_id' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);

$bulk->insert(['_id' => 4, 'x' => 2]);

$bulk->delete(['x' => 1], ['limit' => 1]);

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);
$result = $manager->executeBulkWrite('db.collection', $bulk, $writeConcern);

printf("Добавлено %d документ(ов)\n", $result->getInsertedCount());
printf("Найдено %d документ(ов)\n", $result->getMatchedCount());
printf("Обновлено %d документ(ов)\n", $result->getModifiedCount());
printf("Добавлено и добавлено %d документ(ов)\n", $result->getUpsertedCount());
printf("Удалено %d документ(ов)\n", $result->getDeletedCount());

foreach (
$result->getUpsertedIds() as $index => $id) {
printf('upsertedId[%d]: ', $index);
var_dump($id);
}

/* Если WriteConcern не может быть выполнен */
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true));
}

/* Если запись не может произойти вообще*/
foreach ($result->getWriteErrors() as $writeError) {
printf("Операция#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode());
}

?>

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

Добавлено 3 документ(ов)
Найдено 1 документ(ов)
Обновлено 1 документ(ов)
Добавлено и добавлено 2 документ(ов)
Удалено 1 документ(ов)
upsertedId[3]: object(MongoDB\BSON\ObjectId)#5 (1) {
  ["oid"]=>
  string(24) "54d3adc3ce7a792f4d703756"
}
upsertedId[4]: int(3)

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