我检查了文档https://docs.mongodb.com/manual/reference/change-events/
我不确定“替换”和“更新”事件的确切时间。
例如,当我使用 MongoDB Compass 更改文档的 1 个字段时,我预计事件“更新”会触发,但当我记录该事件时,它是“替换”。
因此,如果预期的更新实际上是“替换”事件,那么真正的“更新”事件何时会触发?
谢谢。
我检查了文档https://docs.mongodb.com/manual/reference/change-events/
我不确定“替换”和“更新”事件的确切时间。
例如,当我使用 MongoDB Compass 更改文档的 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
操作制作特殊查询,这会很昂贵计算。