MongoDB\Driver\Manager::executeBulkWrite

(mongodb >=1.0.0)

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

Описание

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

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

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

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

namespace (string)

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

bulk (MongoDB\Driver\BulkWrite)

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

опции

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

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

writeConcernMongoDB\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);
}


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)

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

To Top