MongoCollection
PHP Manual

MongoCollection::batchInsert

(PECL mongo >=0.9.0)

MongoCollection::batchInsertInerta múltiples documentos en esta colección

Descripción

public mixed MongoCollection::batchInsert ( array $a [, array $options = array() ] )

Parámetros

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().

Valores devueltos

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.

Errores/Excepciones

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.

Historial de cambios

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.

Ejemplos

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"

Ver también


MongoCollection
PHP Manual