(PECL mongo >=1.5.0)
MongoWriteBatch est la classe de base pour MongoInsertBatch, MongoUpdateBatch et MongoDeleteBatch.
MongoWriteBatch vous permet de mettre en lot plusieurs opérations (du même type) et de les envoyer dans le même temps à MongoDB. Ceci est tout particulièrement utile lorsqu'on travaille sur plusieurs documents en même temps, réduisant ainsi les étapes.
Avant la version 1.5.0 du driver, il était possible d'utiliser la méthode MongoCollection::batchInsert(), cependant, depuis la version 1.5.0, cette méthode n'est plus recommandée.
Note : Cette classe n'est disponible que lorsqu'on travaille avec des serveurs MongoDB 2.6.0 (et supérieurs). Elle lancera une exception MongoProtocolException si vous tentez de l'utiliser avec des serveurs MongoDB plus anciens.
$collection
[, string $batch_type
[, array $write_options
]] )MongoWriteBatch::COMMAND_INSERT
Crée un lot d'écritures d'insertion
MongoWriteBatch::COMMAND_UPDATE
Crée un lot d'écritures de mise à jour
MongoWriteBatch::COMMAND_DELETE
Crée un lot d'écritures d'effacement
Lors de l'exécution d'un lot, en appelant la méthode MongoWriteBatch::execute(), MongoWriteBatch va envoyer » maxWriteBatchSize (par défaut, 1000) documents ou jusqu'à » maxBsonObjectSize (par défaut, 16777216 octets), celui qui arrive en premier.
Note:
Les documents ne seront jamais partiellement envoyés. Lors de l'ajout de documents dans le lot, qui dépassent la limite, un nouveau lot sera créé et le document sera ajouté à ce nouveau lot.
Exemple #1 Exemple avec MongoWriteBatch
Ajout de documents dans un lot d'insertion, et l'exécute
<?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);
?>
L'exemple ci-dessus va afficher :
array(2) { ["nInserted"]=> int(3) ["ok"]=> bool(true) }