Атомное обновление нескольких документов в доктрине 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;
}
Другие вопросы по тегам