(PECL mongo >=0.9.0)
MongoCollection::batchInsert — Inerta múltiples documentos en esta colección
a
Array de arrays.
options
Opciones de inserción.
"safe"
Puede ser un booleano o un entero, por omisión FALSE. Si FALSE, el programa
continua su ejecución sin esperar respuesta por parte de la base de datos.
Si TRUE, el programa esperará la respuesta de la base de datos, y en caso
de que la inserción no tenga éxito, emitirá una excepción de tipo
MongoCursorException.
Si safe fuera un entero, replicará la inserción a ese número de máquinas antes de notificar un éxito (o lanzaría una excepción si al replicar se excediera el tiempo de espra; consulte wtimeout). Sobreescribe la variable w asignada a la colección.
"fsync"
Booleano, por omisión FALSE. Obliga a que la inserción se sincronice en disco
antes de notificar éxito. Si TRUE, se realiza de manera implícita una inserción segura (safe)
y sobrescribirá el ajuste safe a FALSE.
"continueOnError"
Booleano, por omisión es FALSE. Si se establece, la base de datos no parará de
procesar un volumen de inserciones si una falla (p.ej. debido a IDs duplicados).
Esto hace que el volumen de inserciones se comporte de manera similar que una insercioón
única, excepto que con la llamada a MongoDB::lastError()
se obtendrá un error de conjunto si cualquier inserción falla, no sólo la primera.
Si ocurren varios errores, sólo se informará de más reciente, mediante
MongoDB::lastError().
Si "safe" está habilitado, devuelve un array asociativo con el estado de las inserciones ("ok")
y con cualquier error que pudiera haber sucedido ("err"). En cualquier otro caso, devuelve
TRUE si la operación por lotes se envió con éxito, o FALSE en caso contrario.
Lanza MongoCursorException si la opción "safe" estuviera habilitada y la inserción fallara.
Lanza MongoCursorTimeoutException si la opción "safe" tuviera un valor mayor que uno, y la base de datos no pudiera replicar la operación en MongoCollection::$wtimeout milisegundos.
| Versión | Descripción |
|---|---|
| 1.0.5 | Añadido el parámetro "options". |
| 1.0.9 | Añadido soporte para pasar enteros a la opción "safe" (antes sólo aceptaba booleanos) y añadida la opción "fsync". |
| 1.2.7 | Se añadió la bandera continueOnError. |
Ejemplo #1 Ejemplo de MongoCollection::batchInsert()
Las inserciones por lotes son una forma rápida de añadir muchos elementos a la base de datos
<?php
$users = array();
for ($i = 0; $i<100; $i++) {
$users[] = array('username' => 'user'.$i, 'i' => $i);
}
$mongo = new Mongo();
$collection = $mongo->my_db->users;
$collection->drop();
$collection->batchInsert($users);
foreach ($users as $user) {
echo $user['_id']."\n"; // completado con instanceof MongoId
}
$users = $collection->find()->sort(array('i' => 1));
foreach ($users as $user) {
var_dump($user['username']);
}
?>
El resultado del ejemplo sería algo similar a:
4bf43ac68ead0e1971000000 4bf43ac68ead0e1971010000 4bf43ac68ead0e1971020000 ... string(5) "user1" string(5) "user2" string(5) "user3" ...
Ejemplo #2 Ejemplo de MongoCollection::batchInsert() ignorando errores
<?php
$con = new Mongo;
$db = $con->demo;
$doc1 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010001'),
'id' => 1,
'desc' => "ONE",
);
$doc2 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010002'),
'id' => 2,
'desc' => "TWO",
);
$doc3 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010002'), // el mismo _id que es de arriba
'id' => 3,
'desc' => "THREE",
);
$doc4 = array(
'_id' => new MongoId('4cb4ab6d7addf98506010004'),
'id' => 4,
'desc' => "FOUR",
);
$c = $db->selectCollection('c');
$c->batchInsert(
array($doc1, $doc2, $doc3, $doc4),
array('continueOnError' => true)
);
$docs = $c->find();
foreach ($docs as $doc) {
var_dump($doc['desc']);
}
?>
El resultado del ejemplo sería algo similar a:
string(3) "ONE" string(3) "TWO" string(4) "FOUR"