Doctrine MongoDB ODM:必须在findAndUpdate()之后调用flush()吗?

时间:2012-05-31 23:45:55

标签: php mongodb doctrine-odm

根据经验,在flush()之后似乎没有必要findAndUpdate(),我在Doctrine ODM / MongoDB文档中的任何地方都找不到明确说明的内容(而且我也懒得阅读很多来源码)。

findAndModify docs on mongodb.org

  

此命令可用于原子地修改文档(最多一个)并将其返回。

Doctrine MongoDB's findAndUpdate() uses MongoDB's findAndModify。所以听起来整个事情确实一次性发生,因此不需要在文档管理器上调用flush()

1 个答案:

答案 0 :(得分:2)

只有将对托管对象的更改写回Mongo才需要Flush。您通过查询构建器界面执行的任何操作都将直接执行并绕过UnitOfWork。对于更新和upsert尤其如此。在findAndUpdate()的情况下,更新应该立即在Mongo中执行,但我相信可以管理返回的对象。之后对该文档的任何更改(例如,通过setter方法)如果您希望将它们写回Mongo,则需要flush()

另外,请注意查询构建器上的returnNew(),该new对应findAndModify的{​​{1}}选项。默认情况下,我相信findAndUpdate()会将文档恢复为预更新状态。您可能更愿意以更新的状态检索文档。