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

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.

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
PHP Manual