1

MongoDB 在更新文档方面有多聪明,如果它实际上不会改变任何东西,它会知道不打扰“更新”文档吗?

比较以下两个更新查询:

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

目的是将集合something中所有文档的属性设置testtrue.

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

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

4

1 回答 1

3

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

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

  1. 从磁盘获取包含文档的页面到 RAM(如果还没有)
  2. 更新内存
  3. 将脏页刷新到磁盘

第一部分无论如何都会发生。现在,如果我们在第二步进行检查,它会消耗更多的 CPU,但它会用可能减少的脏页数量来抵消。我的直觉是你的第一行没有检查和更新所有文件。

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

于 2012-09-24T03:26:12.530 回答