我查了文档https://docs.mongodb.com/manual/reference/change-events/
我不确定“替换”和“更新”事件究竟何时发生。
例如,当我使用 MongoDB Compass 更改文档的 1 个字段时,我预计会触发事件“更新”,但当我记录该事件时,它是“替换”。
因此,如果预期的更新实际上是“替换”事件,那么真正的“更新”事件何时会触发?
谢谢。
最佳答案
简而言之,update
事件就是更新文档而不替换它。 replace
事件是当您创建一个新文档替换旧文档时。
简单的例子:
replset:PRIMARY> db.test.find()
{
"_id": 0,
"txt": "qwerty"
}
进行更新
:
replset:PRIMARY> db.test.update({_id:0}, {$set:{txt:'abc'}})
此更改流事件的结果:
{ _id:
....
operationType: 'update',
....
执行保存
:
replset:PRIMARY> db.test.save({_id:0, txt:'qwerty'})
此更改流事件的结果:
{ _id:
....
operationType: 'replace',
....
如果在 Compass 中更新文档导致 replace
事件,这意味着 Compass 正在后台执行 save
操作而不是 update
。从 GUI 的角度来看,这是有意义的,因为它更容易保存
更改的文档,而不是麻烦检查旧文档和新文档之间的差异并制作一个特殊的 update
查询与特定的 $set
操作,这将是昂贵的计算。
关于MongoDB 更改流事件 : replace vs update?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55333198/