删除文档后如何从MongoDB changeStream获取fullDocument?

时间:2019-07-08 17:05:53

标签: database mongodb changestream

我的代码

我有一个带有两个集合ItemsCalculations的MongoDB。

Items
  value:  Number
  date:   Date
Calculations
  calculation:  Number
  start_date:   Date
  end_date:     Date

Calculation是数据库中所有Item的{​​{1}}值的存储计算,其日期介于Items的开始日期和结束日期之间

Mongo更改流

我认为创建/更新Calculation的好方法是在Calculations集合上创建Mongo更改流,该流会监听Items集合的更改,然后重新计算相关的{{ 1}}。

问题是,根据Mongo Change Event docs,删除文档时,Items字段会被省略,这将阻止我访问已删除的Calculations的日期,这会通知哪个fullDocument应该被更新。

问题

是否有任何方法可以访问由于文档删除而触发的Mongo更改事件的Item

1 个答案:

答案 0 :(得分:1)

不,我不相信有办法。来自https://docs.mongodb.com/manual/changeStreams/#event-notification

  

更改流仅通知已保留到副本集中大多数数据承载成员的数据更改。

当文档被删除并且删除在副本集中的大多数节点上持续存在时,该文档在副本集中不再存在。因此,changestream无法返回不再存在的内容。

您的问题的解决方案为transactions in MongoDB 4.0。也就是说,您可以通过一次原子操作来调整Calculations并删除相应的Items