MongoDB - findAndModify vs findOne Performance

时间:2014-08-01 05:27:34

标签: mongodb

findAndModify查询比findOne慢。假设正在插入一个集合文档,假设每2秒有100到200个文档。哪个更快做一个findOne或findAndModify。假设集合已正确索引,我的查询使用索引

1 个答案:

答案 0 :(得分:1)

正如您已经指出的那样,.findAndModify()旨在完全按照其说法执行操作,并通过更新或删除来“修改”检索到的文档。存在原子性质以避免并发状态问题,如果您在文档上.findOne(),则对内容进行更改,然后尝试.update()

在后一种用例中,“无法保证”该文档与通过.findOne()“检索”文档时的文档相同。所以实际上你可能会覆盖另一个进程所做的更改。

至于表现,这是比较“苹果与橘子”的经典之作,因为它们是两个不同的东西。在.findOne()的情况下,只返回游标中的单个第一个结果,而.findAndModify()中的另一个可能获取原始文档,使用默认写入关注或其他指定的写入关注进行更改,然后返回或者在放弃任何控制权以供他人修改之前检索文件。

每个版本的MongoDB都有不同级别的“锁定”,但重点是.findAndModify()旨在完成更多工作,因此自然需要更长的时间。

如果你可以忍受只是检索一个文件,然后发送更新,那么很好。请注意,您应该比较的“苹果对苹果” 这些操作及其执行方式。

也可能是您可以考虑设置这些操作的写入问题,因为您也可以忍受写入未被确认的事实。但这真的取决于你。但在大多数人看来,使用针对其目的进行优化的工具通常会更好。