(PECL mongo >=1.5.0)
MongoWriteBatch является базовым классом для классов MongoInsertBatch, MongoUpdateBatch и MongoDeleteBatch.
MongoWriteBatch позволяет "собирать в пакет" несколько операций (одного типа) и отправлять их все в MongoDB одновременно. Это может быть особенно полезно при одновременной работе со многими документами, чтобы уменьшить количество обращений.
До версии 1.5.0 драйвера было возможно использовать MongoCollection::batchInsert(), однако, начиная с 1.5.0, этот метод не рекомендуется использовать.
Примечание: Этот класс доступен только при общении с серверами MongoDB 2.6.0 (и выше). Он будет выдавать исключение MongoProtocolException при попытке использовать его на старых серверах MongoDB.
$collection
[, string $batch_type
[, array $write_options
]] )MongoWriteBatch::COMMAND_INSERT
Создает пакет записи и вставки
MongoWriteBatch::COMMAND_UPDATE
Создает пакет обновления записи
MongoWriteBatch::COMMAND_DELETE
Создает пакет удаления записи
При выполнении пакета с помощью вызова MongoWriteBatch::execute(), MongoWriteBatch будет отправлять до maxWriteBatchSize (по умолчанию 1000) или maxBsonObjectSize (по умолчанию 16777216 байт), в зависимости от того, что произойдет первым.
Замечание:
Документы никогда не будут переданы частично. При добавлении документов в пакет, превышающий лимит, создается новый пакет и документ будет помещен в него.
Пример #1 Пример MongoWriteBatch
Добавление документов в пакет и последующее его выполнение:
<?php
$mc = new MongoClient("localhost");
$collection = $mc->selectCollection("test", "test");
$docs = array();
$docs[] = array("my" => "demo");
$docs[] = array("is" => "working");
$docs[] = array("pretty" => "well");
$batch = new MongoInsertBatch($collection);
foreach($docs as $document) {
$batch->add($document);
}
$retval = $batch->execute(array("w" => 1));
var_dump($retval);
?>
Результат выполнения данного примера:
array(2) { ["nInserted"]=> int(3) ["ok"]=> bool(true) }