(PECL mongo >=0.9.0)
MongoCollection::batchInsert — Insère plusieurs documents dans la collection
a
Un tableau de tableaux.
options
Options d'insertion.
"safe"
Peut être un booléen ou un entier, et vaut par défaut FALSE
.
Si vaut FALSE
, le programme continue l'exécution sans attendre
la réponse de la base de données. Si vaut TRUE
, le programme
attendra la réponse de la base de données et lancera une exception
MongoCursorException si l'insertion a échouée.
Si safe est un entier, l'insertion sera répliquée sur l'ensemble des machines avant de retourner le succès de l'opération (ou lancera une exception si la réplication échoue). Cette valeur écrase la variable w définie sur la collection.
"fsync"
Booléen et vaut par défaut FALSE
. Force l'insertion à être synchronisée
sur le disque avant de retourner le succès de l'opération. Si vaut TRUE
,
une insertion sécurisée sera effectuée et le paramétrage de
safe sera automatiquement valorisé à FALSE
.
"continueOnError"
Booléen, par défaut, FALSE
. Si défini, la base de données n'arrêtera
pas une insertion bulk si une d'entre elles échoue (i.e. en raison d'un
ID dupliqué). Ceci rend les insertions bulk comme une succession d'insertion
simple, sauf que lors d'un appel à la méthode
MongoDB::lastError(), un jeu d'erreurs sera retourné
lors de l'échec d'une insertion, et pas seulement la dernière.
Si plusieurs erreurs surviennent, seule la plus récente sera rapportée
par la méthode MongoDB::lastError().
Si l'option "safe" est définie, retourne un tableau associatif
contenant le statut de l'insertion ("ok") ainsi que toutes les erreurs survenues ("err").
Sinon, retourne TRUE
si l'insertion a été envoyée avec succès, FALSE
sinon.
Lance une exception MongoCursorException si l'option "safe" est définie et que l'insertion échoue.
Lance une exception MongoCursorTimeoutException si l'option "safe" est définie à une valeur supérieure à 1 et la base de données ne peut répliquer l'opération dans un délai de MongoCollection::$wtimeout millisecondes.
Version | Description |
---|---|
1.0.5 | Ajout du paramètre "options". |
1.0.9 | Ajout de la possibilité de passer des entiers à l'option "safe" (auparavant, seuls les booléens étaient acceptés) et ajout de l'option "fsync". |
1.2.7 | Le drapeau continueOnError a été ajouté. |
Exemple #1 Exemple avec MongoCollection::batchInsert()
L'insertion en masse est un moyen rapide d'insérer rapidement de nombreux éléments à la fois dans une base
<?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"; // peuplé via l'instance de MongoId
}
$users = $collection->find()->sort(array('i' => 1));
foreach ($users as $user) {
var_dump($user['username']);
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
4bf43ac68ead0e1971000000 4bf43ac68ead0e1971010000 4bf43ac68ead0e1971020000 ... string(5) "user1" string(5) "user2" string(5) "user3" ...
Exemple #2 Exemple avec MongoCollection::batchInsert() où l'on ignore les erreurs
<?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'), // _id identique au précédent
'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']);
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
string(3) "ONE" string(3) "TWO" string(4) "FOUR"