(PECL mongo >=1.5.0)
MongoWriteBatch es la clase base para las clases MongoInsertBatch, MongoUpdateBatch y MongoDeleteBatch.
MongoWriteBatch permite crear lotes de varias operaciones (del mismo tipo) y enviarlos a MongoDB a la vez. Esto puede ser especialmente útil al operar sobre muchos documentos al mismo tiempo para reducir los viajes de ida y vuelta.
Antes de la versión 1.5.0 del controlador, era posible utilizar MongoCollection::batchInsert(), sin embargo, a partir de la versión 1.5.0 no se recomientda dicho método.
Nota: Esta clase solamente está disponible al conversar con servidores de MongoDB 2.6.0 (y posteriores). Se lanzará una MongoProtocolException si se intenta usarla con versiones de MongoDB más antiguas.
$collection
[, string $batch_type
[, array $write_options
]] )MongoWriteBatch::COMMAND_INSERT
Crear un lote de escritura de inserciones
MongoWriteBatch::COMMAND_UPDATE
Crear un lote de escritura de actualizaciones
MongoWriteBatch::COMMAND_DELETE
Crear un lote de escritura de eliminaciones
Al ejecutar un lote, invocando a MongoWriteBatch::execute(), MongoWriteBatch enviará » maxWriteBatchSize (predeterminado a 1000) documentos o hasta » maxBsonObjectSize (predeterminado a 16777216 bytes), lo que ocurra primero.
Nota:
Los documentos nunca se transferirán parcialmente. Si se añade al lote un documento que sobrepase el límte, se creará un nuevo lote donde se colocará dicho documento.
Ejemplo #1 Ejemplo de MongoWriteBatch
Añadir documentos a un lote de Insert y ejecutarlo
<?php
$mc = new MongoClient("localhost");
$colección = $mc->selectCollection("prueba", "prueba");
$docs = array();
$docs[] = array("my" => "demo");
$docs[] = array("is" => "working");
$docs[] = array("pretty" => "well");
$lote = new MongoInsertBatch($colección);
foreach($docs as $documento) {
$lote->add($documento);
}
$retval = $lote->execute(array("w" => 1));
var_dump($retval);
?>
El resultado del ejemplo sería:
array(2) { ["nInserted"]=> int(3) ["ok"]=> bool(true) }