(PECL mongo >=0.9.0)
MongoCollection::update — Update records based on a given criteria
Description of the objects to update.
The object with which to update the matching records.
This parameter is an associative array of the form array("optionname" => <boolean>, ...). Currently supported options are:
"upsert"
If no document matches $criteria, a new document will be created from $criteria and $newobj (see upsert example below).
"multiple"
All documents matching $criteria will be updated. MongoCollection::update() has exactly the opposite behavior of MongoCollection::remove(): it updates one document by default, not all matching documents. It is recommended that you always specify whether you want to update multiple documents or a single document, as the database may change its default behavior at some point in the future.
Returns if the update was successfully sent to the database.
Version | Description |
---|---|
1.0.1 | Changed "options" parameter from boolean to array. Pre-1.0.1, the second parameter was an optional boolean value specifying an upsert. |
Example #1 MongoCollection::update()
Adding an address field to a 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")));
?>
The above example will output something similar to:
array(4) { ["_id"]=> object(MongoId)#6 (0) { } ["firstname"]=> string(3) "Bob" ["lastname"]=> string(5) "Jones" ["address"]=> string(12) "1 Smith Lane" }
Example #2 MongoCollection::update() upsert example
Upserts can simplify code, as a single line can create the object if it does not exist yet and update it if it does.
<?php
$c->drop();
$c->update(array("uri" => "/summer_pics"), array('$inc' => array("page hits" => 1)), array("upsert" => true));
var_dump($c->findOne());
?>
The above example will output something similar to:
array(3) { ["_id"]=> object(MongoId)#9 (0) { } ["uri"]=> string(12) "/summer_pics" ["page hits"]=> int(1) }
Example #3 MongoCollection::update() multiple example
By default, MongoCollection::update() will only update the first document matching $criteria that it finds. Using the "multiple" option can override this behavior, if needed.
This example adds a "gift" field to every person whose birthday is in the next day.
<?php
$today = array('$gt' => new MongoDate(), '$lt' => new MongoDate(strtotime("+1 day")));
$people->update("birthday" => $today), array('$set' => array('gift' => $surprise), array("multiple" => true));
?>
MongoDB core docs on » update.