我检查了文档https://docs.mongodb.com/manual/reference/change-events/
我不确定何时确切地发生“替换”和“更新”事件。
例如,当我使用MongoDB Compass更改文档的1个字段时,我希望事件“更新”将触发,但是当我记录该事件时,它是“替换”。
因此,如果预期的更新实际上是“替换”事件,那么真正的“更新”事件何时触发?
谢谢。
答案 0 :(得分:0)
简而言之,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
操作进行查询,计算起来会很昂贵。