MongoDB\Driver\Manager::executeBulkWrite
(mongodb >=1.0.0)
MongoDB\Driver\Manager::executeBulkWrite — Выполняет одну или несколько операций записи
Описание
$namespace
, MongoDB\Driver\BulkWrite $bulk
, array $options
= array()
) : MongoDB\Driver\WriteResultВыполняет одну или несколько операций записи на основном сервере.
Объект класса MongoDB\Driver\BulkWrite может быть создан с одной или несколькими операциями записи различного типа (например, обновлениями, удалениями и вставками). Драйвер попытается отправить операции одного и того же типа на сервер с минимальным количества запросов, чтобы сократить обращения к серверу.
Список параметров
-
namespace
(string) -
Полностью определенное имя (т.е.
"databaseName.collectionName"
). -
bulk
(MongoDB\Driver\BulkWrite) -
Записи для выполнения.
-
опции
-
options Опция Тип Описание session MongoDB\Driver\Session Сессия для связывания с операцией.
writeConcern MongoDB\Driver\WriteConcern Гаранатия записи для применения к операции.
Возвращаемые значения
В случае успеха возвращает MongoDB\Driver\WriteResult.
Ошибки
- При отсутствии какой-либо операции записи в
bulk
, выбрасывает исключение MongoDB\Driver\Exception\InvalidArgumentException. - Если
bulk
уже был выполнен, выбрасывает исключение MongoDB\Driver\Exception\InvalidArgumentException. Объекты MongoDB\Driver\BulkWrite не могут быть выполнены несколько раз. - Выбрасывается MongoDB\Driver\Exception\InvalidArgumentException, если опция
"session"
используется в сочетании с неподтвержденной гарантией записи. - При ошибке парсинга аргумента бросает исключение MongoDB\Driver\Exception\InvalidArgumentException.
- При неудачном соединении с сервером (кроме ошибок аутентификации), бросает исключение MongoDB\Driver\Exception\ConnectionException.
- При неудачной аутентификации бросает исключение MongoDB\Driver\Exception\AuthenticationException.
- При ошибке записи бросает исключение MongoDB\Driver\Exception\BulkWriteException.
- При ошибке парсинга аргумента бросает исключение MongoDB\Driver\Exception\InvalidArgumentException.
- При неудачном соединении с сервером (кроме ошибок аутентификации), бросает исключение MongoDB\Driver\Exception\ConnectionException.
- При неудачной аутентификации бросает исключение MongoDB\Driver\Exception\AuthenticationException.
- При возникновении других ошибок, выбрасывает исключение MongoDB\Driver\Exception\RuntimeException.
Список изменений
Версия | Описание |
---|---|
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)
Смотрите также
- MongoDB\Driver\BulkWrite
- MongoDB\Driver\WriteResult
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\Server::executeBulkWrite() - Выполнить одну или несколько операций записи на сервере