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

Ale*_*ist 7 database mongodb changestream

我的代码

我有一个包含两个集合的 MongoDB,Items以及Calculations.

Items
  value:  Number
  date:   Date
Run Code Online (Sandbox Code Playgroud)
Calculations
  calculation:  Number
  start_date:   Date
  end_date:     Date
Run Code Online (Sandbox Code Playgroud)

ACalculation是基于DB 中Item所有Items日期在Calculation的开始日期和结束日期之间的值的存储计算。

Mongo 变更流

我认为创建/更新的一个好方法Calculations是在Items集合上创建一个 Mongo 更改流,它侦听对集合的更改Items,然后重新计算相关的Calculations.

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

有什么方法可以访问fullDocument由于文档删除而触发的 Mongo Change 事件?

kev*_*adi 5

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

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

当文档被删除并且删除在副本集中的大多数节点上持久存在时,该文档已不再存在于副本集中。因此,变更流不能返回不再存在的东西。

您的问题的解决方案是MongoDB 4.0 中的事务。也就是说,您可以在单个原子操作中调整Calculations和删除相应的内容。Items

  • 实际上,解决方案是将不可变字段作为文档键(即 _id)的一部分。 (2认同)