Атомное обновление нескольких документов в доктрине mongodb
Я работаю над проектом с symfony2 и doctrine-mongodb-odm. Я хочу выполнить элементарное обновление для нескольких документов с помощью построителя запросов, но мне чего-то не хватает:
$this->createQueryBuilder('MyBundle:MyDoc')
->update()
->field('isOpen')->set(false)
->field('isOpen')->equals(true)
->getQuery()
->execute();
Это работает, но обновляет только один документ. Я думаю, я должен добавить опцию, как
array('multi' => true)
где-то, но я не нашел ничего об этом в документах.
Может кто-нибудь помочь мне, пожалуйста?
2 ответа
Я нашел ответ, посмотрев в определение класса. Существует метод построителя запросов с именем множественный, чтобы установить эту опцию.
$this->createQueryBuilder('MyBundle:MyDoc')
->update()
->multiple(true)
->field('isOpen')->set(false)
->field('isOpen')->equals(true)
->getQuery()
->execute();
В настоящее время использование множественного () не рекомендуется. Вместо этого вы можете просто использовать updateMany().
/**
* Set the "multiple" option for an update query.
*
* @param boolean $bool
* @return $this
*
* @deprecated Deprecated in version 1.4 - use updateOne or updateMany instead
*/
public function multiple($bool = true)
{
$this->query['multiple'] = (boolean) $bool;
return $this;
}
/**
* Change the query type to update multiple documents
*
* @return $this
*/
public function updateMany()
{
$this->query['type'] = Query::TYPE_UPDATE;
$this->query['multiple'] = true;
return $this;
}