MongoCollection::batchInsert
(PECL mongo >=0.9.0)
MongoCollection::batchInsert — Inerta múltiples documentos en esta colección
Descripción
Parámetros
-
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.
"w"
Véase WriteConcerns. El valor predeterminado de MongoClient es 1.
"fsync"
Booleano, su valor predeterminado es
FALSE. Fuerza a la inserción a estar sincronizada con el disco antes de devolver éxito. Si esTRUE, está implicada una inserción declarada y sobrescribirá el ajuste w a 0."timeout"
Entero, su valor predeterminado es MongoCursor::$timeout. Si se establece a "safe", establece cuánto espera el cliente (en milisegundos) a un respuesta de la base de datos. Si la base de datos no responde dentro del periodo del tiempo de espera, será lanzada una MongoCursorTimeoutException.
-
"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(). "safe"
Obsoleto. Use la opción w de WriteConcern.
Valores devueltos
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.
Errores/Excepciones
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.
Historial de cambios
| 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. |
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 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"
Ver también
- MongoCollection::insert() - Inserta un documento en la colección
- MongoCollection::update() - Actualizar registros basándose en los criterios proporcionados
- MongoCollection::find() - Consulta esta colección, devolviendo un objeto MongoCursor para el conjunto de resultados
- MongoCollection::remove() - Eliminar registros de esta colección
- Documentación de MongoDB sobre » insert.
