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 :

  • "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éfault, vaut FALSE. Si la journalisation est activée, il fonctionnera exactement comme l'option "j". Si la journalisation n'est pas activée, il forcera l'insertion à être synchronisée avec le disque avant de retourner le statut de succès. Si vaut TRUE, une insertion reconnue sera implicite et va écraser la configuration w à 0.

    Note:

    Cette option est obsolète. Veuillez utiliser plutôt l'option "j".

  • "j"

    Booléen, par défaut FALSE. Force l'insertion à être synchronisée avec le journal avant de retourner le succès de l'opération. Si vaut TRUE, la reconnaissance d'une insertion sera appliquée, et va écraser la configuration passant de w à 0.

  • "socketTimeoutMS"

    Integer, defaults to MongoCursor::$timeout. If acknowledged writes are used, this sets how long (in milliseconds) for the client to wait for a database response. If the database does not respond within the timeout period, a MongoCursorTimeoutException will be thrown.

  • "w"

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

  • "wtimeout"

    Durée d'attente pour la reconnaissance WriteConcern. La valeur par défaut pour MongoClient est 10000 millisecondes.

  • "wTimeoutMS"

    How long to wait for write concern acknowledgement. The default value for MongoClient is 10000 milliseconds.

  • "safe"

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

  • "timeout"

    Entier, par défaut, vaut MongoCursor::$timeout. Si la reconnaissance des écritures est utilisée, ceci va définir (en millisecondes) la durée d'attente du client d'une réponse de la base de données. Si la base de données ne répond pas durant cette période, une exception de type MongoCursorTimeoutException sera émise.

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.5.0 L'option "wtimeout" a été renommée en "wTimeoutMS".
1.5.0 L'option "timeout" a été renommée en "socketTimeoutMS".
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