La clase MongoWriteBatch

(PECL mongo >=1.5.0)

Introducción

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.

Sinopsis de la Clase

MongoWriteBatch {
/* Constantes */
const int COMMAND_INSERT = 1 ;
const int COMMAND_UPDATE = 2 ;
const int COMMAND_DELETE = 3 ;
/* Métodos */
protected __construct ( MongoCollection $collection [, string $batch_type [, array $write_options ]] )
public add ( array $item ) : bool
final public execute ( array $write_options ) : array
}

MongoWriteBatch types

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

Descripción

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.

Errores/Excepciones

Ejemplos

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

Tabla de contenidos