3

我使用 symfony2 和教义-mongodb-odm 从事一个项目。我想使用查询构建器对多个文档执行原子更新,但我遗漏了一些东西:

$this->createQueryBuilder('MyBundle:MyDoc')
->update()
->field('isOpen')->set(false)
->field('isOpen')->equals(true)
->getQuery()
->execute();

它可以工作,但它只更新一个文档。我想我应该添加一个选项

array('multi' => true)

某处,但我在文档中没有找到任何关于此的内容。

有人可以帮我吗?

4

2 回答 2

4

我通过查看类定义找到了答案。查询生成器有一个名为 multiple 的方法来设置此选项。

$this->createQueryBuilder('MyBundle:MyDoc')
->update()
->multiple(true)
->field('isOpen')->set(false)
->field('isOpen')->equals(true)
->getQuery()
->execute();
于 2013-01-21T07:29:24.860 回答
2

现在使用multiple()已被弃用。您可以简单地使用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;
}
于 2017-02-13T09:50:23.760 回答