根据经验,在flush()
之后似乎没有必要findAndUpdate()
,我在Doctrine ODM / MongoDB文档中的任何地方都找不到明确说明的内容(而且我也懒得阅读很多来源码)。
findAndModify
docs on mongodb.org州
此命令可用于原子地修改文档(最多一个)并将其返回。
Doctrine MongoDB's findAndUpdate()
uses MongoDB's findAndModify
。所以听起来整个事情确实一次性发生,因此不需要在文档管理器上调用flush()
。
答案 0 :(得分:2)
只有将对托管对象的更改写回Mongo才需要Flush。您通过查询构建器界面执行的任何操作都将直接执行并绕过UnitOfWork。对于更新和upsert尤其如此。在findAndUpdate()
的情况下,更新应该立即在Mongo中执行,但我相信可以管理返回的对象。之后对该文档的任何更改(例如,通过setter方法)如果您希望将它们写回Mongo,则需要flush()
。
另外,请注意查询构建器上的returnNew()
,该new
对应findAndModify
的{{1}}选项。默认情况下,我相信findAndUpdate()
会将文档恢复为预更新状态。您可能更愿意以更新的状态检索文档。