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