2012-09-24 23 views
1

MongoDB在更新文档方面有多智能,如果它不会实际改变任何内容,它会知道不打扰“更新”文档吗?MongoDB更新查询:更新文档时,是否更好地过滤尚未更新的文档?

比较以下两个更新查询:

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

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

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

我们不考虑索引,因为我认为除了重点之外。

回答

3

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

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

  1. 取一个页面从磁盘上的文件到内存(如果尚未有)
  2. 更新内存
  3. 冲洗脏页面磁盘

第一部分无论如何发生。现在,如果我们在第二步中进行检查,它会烧更多的CPU,但可能会减少脏页的数量。我的直觉是你的第一行不检查并更新所有文件。

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