Класс MongoWriteBatch

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

Обзор классов

MongoWriteBatch {
/* Константы */
const int COMMAND_INSERT = 1 ;
const int COMMAND_UPDATE = 2 ;
const int COMMAND_DELETE = 3 ;
/* Методы */
protected __construct ( MongoCollection $collection , string $batch_type = ? , array $write_options = ? )
public add ( array $item ) : bool
final public execute ( array $write_options ) : array
}

Типы MongoWriteBatch

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)
}

Содержание