2

从经验上看,似乎flush()没有必要findAndUpdate(),我只是在 Doctrine ODM/MongoDB 文档中的任何地方都找不到明确说明(而且我没有费心阅读太多源代码)。

findAndModifymongodb.org 上的文档状态

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

Doctrine MongoDBfindAndUpdate()使用 MongoDB 的findAndModify. 所以听起来整个事情确实是一口气发生的,所以不需要调用flush()文档管理器。

4

1 回答 1

2

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

另外,请注意查询生成器returnNew(),它对应于. 默认情况下,我相信会以更新前的状态返回文档。您可能更愿意检索处于更新状态的文档。newfindAndModifyfindAndUpdate()

于 2012-06-04T15:28:35.827 回答