MongoCollection::findAndModify
(PECL mongo >=1.3.0)
MongoCollection::findAndModify — Обновляет документ и возвращает его
Описание
$query
, array $update
= ?
, array $fields
= ?
, array $options
= ?
) : arrayКоманда findAndModify атомарно изменяет и возвращает один документ. По умолчанию возвращенный документ не содержит изменений, внесенных в обновление. Чтобы вернуть документ с изменениями, внесенными в обновление, используйте параметр new.
Список параметров
-
query
-
Критерии запроса для поиска.
-
update
-
Критерии обновления.
-
fields
-
Необязательно, вернуть только эти поля.
-
options
-
Массив опций, которые нужно применить, например удалить документ соответствия из БД и вернуть его.
Опция Описание sort array Определяет, какой документ будет изменен операцией, если запрос выбирает несколько документов. findAndModify изменит первый документ в порядке сортировки, заданном этим аргументом. remove bool Необязательно, если поле update существует. Когда true
, удаляет выбранный документ. Значением по умолчанию являетсяfalse
.update array Необязательно, если поле remove существует. Выполняет обновление выбранного документа. new bool Необязательный. Когда true
, возвращает измененный документ, а не оригинал. Метод findAndModify игнорирует параметр new для операций удаления. Значением по умолчанию являетсяfalse
.upsert bool Необязательный. Используется вместе с полем update. Когда true
, команда findAndModify создает новый документ, если запрос не возвращает документов. По умолчанию установлено значение false. В MongoDB 2.2 команда findAndModify возвращаетnull
, когда upsert равенtrue
.
Возвращаемые значения
Возвращает исходный документ или измененный документ, если установлен new.
Ошибки
Выдает исключение MongoResultException при сбое.
Примеры
Пример #1 Пример использования 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);
?>
Результатом выполнения данного примера будет что-то подобное:
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" } }
Пример #2 Пример обработки ошибок MongoCollection::findAndModify()
<?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());
}
?>
Результатом выполнения данного примера будет что-то подобное:
13097 : exception: Unsupported projection option: $pop array(3) { ["errmsg"]=> string(46) "exception: Unsupported projection option: $pop" ["code"]=> int(13097) ["ok"]=> float(0) }
Смотрите также
- Документация по » команде findAndModify MongoDB