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 $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.

Ошибки

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

Версия Описание
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::MAJORITY100);
$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)

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