MongoDB更新查询:更新文档时,是否最好过滤尚未更新的文档?

时间:2012-09-24 02:02:07

标签: mongodb

MongoDB对于更新文档有多聪明,如果文档实际上没有改变任何内容,它是否知道不会“更新”文档?

比较以下两个更新查询:

db.test.update({}, {'$set': {'something': true}})
db.test.update({'something': {'$ne': true}}, {'$set': {'something': true}})

目的是将something集合中所有文档的test属性设置为true

假设某些文档可能已将something属性设置为true

我们不考虑索引,因为我认为这不是重点。

1 个答案:

答案 0 :(得分:3)

我认为它没有太大的区别,因为MongoDB无论如何都必须遍历所有文档(因为我们没有使用索引)。

此外,更新是一个三步操作:

  1. 将文档从磁盘提取到RAM(如果尚未存在)
  2. 更新内存
  3. 将脏页刷新到磁盘
  4. 无论如何,第一部分发生了。现在,如果我们在第二步检查,它会消耗更多的CPU,但是可以减少脏页数量。我的直觉是你的第一行不会检查和更新所有文件。

    我希望核心的10gen人会出现在这个话题中并告诉我们到底发生了什么。