MongoCollection
PHP Manual

MongoCollection::update

(PECL mongo >=0.9.0)

MongoCollection::updateModifie les enregistrements

Description

public bool|array MongoCollection::update ( array $criteria , array $new_object [, array $options = array() ] )

Liste de paramètres

criteria

La description des objets à modifier.

new_object

L'objet avec lequel modifier les objets trouvés.

options

Ce paramètre est un tableau associatif sous la forme array("optionname" => <boolean>, ...). Les options actuellement supportées sont :

  • "w"

    Voir WriteConcerns. La valeur par défaut pour MongoClient est 1.

  • "upsert"

    Si aucun document ne correspond au critère $criteria, un nouveau document sera inséré.

    Si un nouveau document doit être inséré, et que $new_object contient des modificateurs atomiques (i.e. opérateurs $), alors ces opérateurs seront appliqués au paramètre $criteria pour créer le nouveau document. Si $new_object ne contient pas de modificateur atomique, il sera pris tel quel en tant que document inséré. Voir l'exemple ci-dessous pour plus d'informations.

  • "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.

  • "fsync"

    Booléen, par défaut vaut FALSE. Force la synchronisation de l'insertion avant de retourner le succès de l'opération. Si vaut TRUE, une insertion reconnue est implicite, et écrasera la configuration de w à 0.

  • "timeout"

    Entier, par défaut, vaut MongoCursor::$timeout. Si "safe" est défini, ce sera le temps d'attente du client d'une réponse de la base de données (en millisecondes). Si la base de données ne répond pas dans ce délai, une exception MongoCursorTimeoutException sera émise.

  • "safe"

    Obsolète. Veuillez utiliser l'option w de WriteConcern w.

Valeurs de retour

Retourne un tableau contenant le statit de la mise à jour si l'option "w" est définie. Sinon, retourne TRUE.

Les champs du tableau de statut sont décrits dans la documentation de la méthode MongoCollection::insert().

Erreurs / Exceptions

Lance une exception MongoCursorException si l'option "w" est définie et que l'écriture échoue.

Lance une exception MongoCursorTimeoutException si l'option "w" est définie à une valeur supérieure à un, et que l'opération prend plus de temps que MongoCursor::$timeout millisecondes à se terminer. Ceci ne tue pas l'opération sur le serveur, c'est un délai d'attente maximal côté client. La mesure pour MongoCollection::$wtimeout est le milliseconde.

Historique

Version Description
1.3.0 Le paramètre options n'accepte plus de booléen pour indiquer un upsert. A la place, ceci doit être effectué via array('upsert' => true).
1.2.11 Lance une alerte de niveau E_DEPRECATED lorsque le paramètre options est de type scalar.
1.2.0 Ajout de l'option "timeout".
1.0.11 Se déconnecte lors d'erreurs "not master" si "safe" est utilisé.
1.0.9

Ajout de la possibilité de passer des entiers à l'option "safe" (auparavant, seuls les booléens étaient acceptés).

Ajout de l'option "fsync".

Le type retourné a été modifié en un tableau contenant les informations de l'erreur si l'option "safe" est utilisé, sinon, ce sera un booléen comme auparavant.

1.0.5 Ajout de l'option "safe".
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.

Exemples

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 Exemples avec MongoCollection::update() et upsert

Les Upserts permettent de simplifier le code, vu qu'une simple ligne permet de créer le document s'il n'existe pas encore (en se basant sur le paramètre $criteria) ou de le mettre à jour s'il existe.

Dans l'exemple suivant, $new_object contient un modificateur atomique. Vu que la collection est vide, l'upsert doit insérer un nouveau document, et utilisera les opérateurs de $criteria pour le créer.

<?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)
}

Si $new_object ne contient pas de modificateurs atomiques (i.e. des opérateurs $), un upsert utilisera $new_object tel quel comme nouveau document. Ceci correspond à une mise à jour normale, vu qu'aucun modificateur atomique n'est utilisé, le document sera écrasé.

<?php

$c
->drop();
$c->update(
    array(
"name" => "joe"),
    array(
"username" => "joe312""createdAt" => new MongoDate()), 
    array(
"upsert" => true)
);
var_dump($c->findOne());

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

array(3) {
  ["_id"]=>
  object(MongoId)#10 (0) {
  }
  ["username"]=>
  string(6) "joe312"
  ["createdAt"]=>
  object(MongoDate)#4 (0) {
  }
}

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(
    array(
"birthday" => $today),
    array(
'$set' => array('gift' => $surprise)),
    array(
"multiple" => true)
);

?>

Voir aussi

La documentation PHP sur les mises à jour et la » documentation core de MongoDB.


MongoCollection
PHP Manual