(PECL mongo >=0.9.0)
MongoCollection::update — Modifie les enregistrements
La description des objets à modifier.
L'objet avec lequel modifier les objets trouvés.
Ce paramètre est un tableau associatif sous la forme array("optionname" => <boolean>, ...). Les options actuellement supportées sont :
"upsert"
Si aucun document ne correspond au critère $criteria, un nouveau document sera créé depuis les variables $criteria et $newobj (voir l'exemple avec upsert ci-dessous).
"multiple"
Tous les documents correspondants au $criteria seront mis à jour. MongoCollection::update() a le comportement opposé de MongoCollection::remove(): elle met à jour un document par défaut, pas tous les documents correspondants. Il est recommandé de toujours précisez si vous voulez mettre à jour un document ou plusieurs, la base de données pouvant changer son comportement par défaut dans le futur.
"safe"
Vérifie si la mise à jour a réussi.
Retourne si la mise à jour a été envoyée avec succès à la base de données.
Lance une exception MongoCursorException si l'option "safe" est définie et que la mise à jour échoue.
Version | Description |
---|---|
1.0.1 | Le paramètre "options" passe de booléen à un tableau. En version Pre-1.0.1, le second paramètre était une valeur booléenne optionnelle, spécifiant un upsert. |
1.0.5 | Ajout de l'option "safe". |
Exemple #1 Exemple avec MongoCollection::update()
Ajout d'un champ adresse à un document.
<?php
$c->insert(array("firstname" => "Bob", "lastname" => "Jones" ));
$newdata = array('$set' => array("address" => "1 Smith Lane"));
$c->update(array("firstname" => "Bob"), $newdata);
var_dump($c->findOne(array("firstname" => "Bob")));
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
array(4) { ["_id"]=> object(MongoId)#6 (0) { } ["firstname"]=> string(3) "Bob" ["lastname"]=> string(5) "Jones" ["address"]=> string(12) "1 Smith Lane" }
Exemple #2 Exemple avec MongoCollection::update() et upsert
Les Upserts permettent de simplifier le code, vu qu'une simple ligne permet de créer l'objet s'il n'existe pas encore, et de le mettre à jour s'il existe.
<?php
$c->drop();
$c->update(array("uri" => "/summer_pics"), array('$inc' => array("page hits" => 1)), array("upsert" => true));
var_dump($c->findOne());
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
array(3) { ["_id"]=> object(MongoId)#9 (0) { } ["uri"]=> string(12) "/summer_pics" ["page hits"]=> int(1) }
Exemple #3 Exemple avec plusieurs MongoCollection::update()
Par défaut, MongoCollection::update() met uniquement à jour le premier document correspondant aux critères $criteria qu'il trouve. En utilisant l'option "multiple", ce comportement est redéfini.
Cet exemple ajoute un champ "gift" à chaque personne possédant un anniversaire dans le prochain jour.
<?php
$today = array('$gt' => new MongoDate(), '$lt' => new MongoDate(strtotime("+1 day")));
$people->update("birthday" => $today), array('$set' => array('gift' => $surprise), array("multiple" => true));
?>
Documentation de MongoDB » concernant update.