根据经验,在 findAndUpdate()
之后似乎不需要 flush()
,我只是在 Doctrine ODM/MongoDB 文档中找不到明确说明的地方(而且我没有费心去阅读太多源代码)。
findAndModify
docs on mongodb.org状态
This command can be used to atomically modify a document (at most one) and return it.
和Doctrine MongoDB's findAndUpdate()
uses MongoDB's findAndModify
。所以听起来整个事情确实是一次性发生的,因此没有必要在文档管理器上调用 flush()
。
最佳答案
仅当将托管对象的更改写入 Mongo 时才需要刷新。您通过查询生成器界面执行的任何操作都将直接执行并绕过 UnitOfWork。对于更新和更新插入尤其如此。在 findAndUpdate() 的情况下,更新应该立即在 Mongo 中执行,但我相信返回的对象可能会被管理。如果您希望随后对该文档进行任何更改(例如通过 setter 方法),则需要使用 flush()
将其写回 Mongo。
此外,请注意查询生成器上的 returnNew()
,它对应于 findAndModify
的 new
选项。默认情况下,我相信 findAndUpdate()
将返回更新前状态的文档。您可能更愿意检索更新状态的文档。
关于php - Doctrine MongoDB ODM : must one call flush() after findAndUpdate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10842727/