Met à jour un document et le retourne

# MongoCollection::findAndModify

(PECL mongo >=1.3.0)

MongoCollection::findAndModify — Met à jour un document et le retourne

### Description

public MongoCollection::findAndModify ( array `$query` [, array `$update` [, array `$fields` [, array `$options` ]]] ) : array

La méthode findAndModify modifie automatiquement un document et le retourne. Par défaut, le document retourné n'inclut pas les modifications effectuées lors de la mise à jour. Pour retourner le document avec les modifications effectuées lors de la mise à jour, utilisez la méthode avec l'option new.

### Liste de paramètres

`query`

  Les critères de recherche.

`update`

  Les critères de mise à jour.

`fields`

  Optionnellement, ne retourne que ces champs.

`options`

  Un tableau d'options à appliquer, comme le fait de supprimer le document trouvé depuis la base de données et le retourner.

  Option | Description
  --- | ---
  sort array | Détermine le document que l'opération va modifier si la requête sélectionne plusieurs documents. findAndModify va modifier le premier document suivant l'ordre spécifié par cet argument.
  remove boolean | Optionnel si le champ update existe. Lorsque vaut `TRUE`, le document sélectionné sera supprimé. Par défaut, vaut `FALSE`.
  update array | Optionnel, si le champ remove existe. Effectue une mise à jour du document sélectionné.
  new boolean | Optionnel. Lorsque vaut `TRUE`, retourne le document modifié plutôt que l'original. La méthode findAndModify ignore l'option new pour les opérations de suppression. Par défaut, vaut `FALSE`.
  upsert boolean | Optionnel. Utilisé en conjonction du champ update. Lorsque vaut `TRUE`, la méthode findAndModify crée un nouveau document si la requête retourne aucun document. Par défaut, vaut `FALSE`. En MongoDB 2.2, la méthode findAndModify retourne `NULL` lorsque upsert vaut `TRUE`.

### Valeurs de retour

Retourne le document original, ou le document modifié lorsque new est défini.

### Erreurs / Exceptions

Lance une exception MongoResultException en cas d'échec.

### Exemples

Exemple #1 Exemple avec MongoCollection::findAndModify()

`<?php
$m = new Mongo;
$col = $m->selectDB("test")->jobs;
$col->insert(array(
"name" => "Next promo",
"inprogress" => false,
"priority" => 0,
"tasks" => array( "select product", "add inventory", "do placement"),
) );
$col->insert(array(
"name" => "Biz report",
"inprogress" => false,
"priority" => 1,
"tasks" => array( "run sales report", "email report" )
) );
$col->insert(array(
"name" => "Biz report",
"inprogress" => false,
"priority" => 2,
"tasks" => array( "run marketing report", "email report" )
),
array("w" => 1)
);
$retval = $col->findAndModify(
array("inprogress" => false, "name" => "Biz report"),
array('$set' => array('inprogress' => true, "started" => new MongoDate())),
null,
array(
"sort" => array("priority" => -1),
"new" => true,
)
);
var_dump($retval);
?>`

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

    array(6) {
      ["_id"]=>
      object(MongoId)#7 (1) {
        ["$id"]=>
        string(24) "5091b5b244415e8cc3000002"
      }
      ["inprogress"]=>
      bool(true)
      ["name"]=>
      string(10) "Biz report"
      ["priority"]=>
      int(2)
      ["started"]=>
      object(MongoDate)#8 (2) {
        ["sec"]=>
        int(1351726514)
        ["usec"]=>
        int(925000)
      }
      ["tasks"]=>
      array(2) {
        [0]=>
        string(20) "run marketing report"
        [1]=>
        string(12) "email report"
      }
    }

Exemple #2 Exemple avec MongoCollection::findAndModify() et un gestionnaire d'erreur

`<?php
$m = new Mongo;
$col = $m->selectDB("test")->jobs;
try {
$retval = $col->findAndModify(
array("inprogress" => false, "name" => "Next promo"),
array('$pop' => array("tasks" => -1)),
array("tasks" => array('$pop' => array("stuff"))),
array("new" => true)
);
} catch(MongoResultException $e) {
echo $e->getCode(), " : ", $e->getMessage(), "\n";
var_dump($e->getDocument());
}
?>`

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

    13097 : exception: Unsupported projection option: $pop
    array(3) {
      ["errmsg"]=>
      string(46) "exception: Unsupported projection option: $pop"
      ["code"]=>
      int(13097)
      ["ok"]=>
      float(0)
    }

### Voir aussi

- La documentation MongoDB sur » findAndModify