(PECL mongo >=0.9.0)
MongoCollection::batchInsert — Inerta múltiples documentos en esta colección
a
Un array de arrays u objetos. Si se utilizan objetos, estos no pueden tener propiedades protegidas o privadas.
Nota:
Si los documentos a insertar no poseen una clave _id o propiedad, se creará una nueva instancia de MongoId y se le asignará. Véase MongoCollection::insert() para información adicional sobre este comportamiento.
options
Opciones para las inserciones.
"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().
Nota:
Por favor, observe que continueOnError afecta únicamente a los errores del lado del servidor. Si se intenta insertar un documento que tiene errores (por ejemplo que contiene una clave con un nombre vacío), el documento no es transferido a la base de datos ya que el controlador detecta este error y falla. continueOnError no tiene efecto sobre errores detectados en los documentos por el controlador.
"fsync"
Booleano, su valor predeterminado es FALSE
. Si la opción "journal" está habilitada, funciona exactamente como "j". Si no está habilitada, fuerza a la inserción que sea sincronizada con el disco antes de devolver que tuvo éxito. Si es TRUE
, está implicada una inserción reconocida y sobrescribirá el ajuste w a 0.
Nota:
Esta opción está obsoleta. Use la opción "j" en su lugar.
"j"
Booleano, su valor predeterminado es FALSE
. Fuerza a la inserción a ser sincronizada con el diario antes de devolver que ha tenido éxito. Si es TRUE
, implica una inserción reconocida y sobrescribirá el ajuste w a 0.
"w"
Véase WriteConcerns. El valor predeterminado de MongoClient es 1.
"wtimeout"
Cuánto esperar para el reconocimiento de WriteConcern. El valor predeterminado de MongoClient es 10000 milisegundos.
"safe"
Obsoleto. Use la opción w de WriteConcern.
"timeout"
Entero, valor predeterminado MongoCursor::$timeout. Si se usan las escrituras reconocidas, esto estable cuánto debe esperar el cliente (en milisegundos) a una respuesta de la base de datos. Si la base de datos no responde dentro de perído de espera, se lanzará una MongoCursorTimeoutException.
Si el parámetro w está establecido para aceptar la escritura,
devuelve un array asociativo con el estado de las inserciones ("ok") y cualquier
error que pudiera ocurrir ("err"). De lo contrario, devuelve TRUE
si la
inserción por lotes fue enviada con éxito, FALSE
si no.
Lanza una excepción de tipo MongoException si cualquier documento insertado está vacío o si contiene claves de longitud cero. Intentar insertar un objeto con propiedades protegidas o privadas causará un error de clave de longitud cero.
Lanza una MongoCursorException si la opción "w" está establecida y la escritura falla.
Lanza una MongoCursorTimeoutException si la opción "w" está establecida a un valor mayor que uno y la operación toma más de MongoCursor::$timeout milisegundos en completarse. Esto no pondrá fin a la operación en el servidor, es un tiempo de espera del lado del cliente. La operación en MongoCollection::$wtimeout es milisegundos.
Versión | Descripción |
---|---|
1.2.7 | Se añadió la opción "continueOnError". |
1.0.9 |
Se añadió la capacidad de pasar números enteros a la opción "safe", que anteriormente sólo aceptaba booleanos. Se añadió la opción "fsync". |
1.0.5 | Se añadió el parámetro options . |
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 MongoClient();
$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"