MongoDB对于更新文档有多聪明,如果文档实际上没有改变任何内容,它是否知道不会“更新”文档?
比较以下两个更新查询:
db.test.update({}, {'$set': {'something': true}})
db.test.update({'something': {'$ne': true}}, {'$set': {'something': true}})
目的是将something
集合中所有文档的test
属性设置为true
。
假设某些文档可能已将something
属性设置为true
。
我们不考虑索引,因为我认为这不是重点。
答案 0 :(得分:3)
我认为它没有太大的区别,因为MongoDB无论如何都必须遍历所有文档(因为我们没有使用索引)。
此外,更新是一个三步操作:
无论如何,第一部分发生了。现在,如果我们在第二步检查,它会消耗更多的CPU,但是可以减少脏页数量。我的直觉是你的第一行不会检查和更新所有文件。
我希望核心的10gen人会出现在这个话题中并告诉我们到底发生了什么。