2

我检查了文档https://docs.mongodb.com/manual/reference/change-events/

我不确定“替换”和“更新”事件的确切时间。

例如,当我使用 MongoDB Compass 更改文档的 1 个字段时,我预计事件“更新”会触发,但当我记录该事件时,它是“替换”。

因此,如果预期的更新实际上是“替换”事件,那么真正的“更新”事件何时会触发?

谢谢。

4

1 回答 1

1

简而言之,update事件是当您更新文档而不替换它时。replace事件是当您创建一个新文档替换旧文档时。

简单的例子:

replset:PRIMARY> db.test.find()
{
  "_id": 0,
  "txt": "qwerty"
}

做一个update

replset:PRIMARY> db.test.update({_id:0}, {$set:{txt:'abc'}})

导致此变更流事件:

{ _id:
   ....
  operationType: 'update',
   ....

做一个save

replset:PRIMARY> db.test.save({_id:0, txt:'qwerty'})

导致此变更流事件:

{ _id:
   ....
  operationType: 'replace',
   ....

如果在 Compass 中更新文档导致了一个replace事件,这意味着 Compass 正在save后台执行操作,而不是update. 从 GUI 的角度来看,这是有道理的,因为save更改文档更容易,而不是麻烦地检查旧文档和新文档之间的差异并update使用特定$set操作制作特殊查询,这会很昂贵计算。

于 2019-03-26T04:48:15.037 回答