MongoDB中findOneAndUpdate更新相同值是否触发change stream监听
问题解答
是否会执行字段覆盖更新?
- 不会执行实际的字段覆盖写入操作。MongoDB 原生对
$set操作有值对比优化:执行更新前会先比对待写入的字段值和文档当前的对应字段值,如果完全一致,会直接跳过该部分的写入逻辑,不会对文档做任何修改,也不会改动文档的元字段(如示例中的__v字段)。 - 仅当你额外配置了强制写入的参数(例如开启 Mongoose
optimisticConcurrency强制版本号递增、显式指定强制更新updatedAt时间戳)时,才会触发实际写入,你给出的示例代码未携带这类配置,因此不会执行实际更新。
是否能在Change Stream中监听到更新事件?
- 不能监听到对应的更新事件。Change Stream 仅会推送集合中实际发生的数据变更事件,你的场景下没有触发任何真实的文档写入或修改,因此不会生成对应的
update事件,也不会有其他变更事件产生。 - 补充:如果本次操作触发了
upsert逻辑插入新文档,才会生成对应的insert事件。
内容的提问来源于stack exchange,提问作者Muhammad Danyal
相关产品推荐
相关产品推荐

