我有一个带有两个集合Items
和Calculations
的MongoDB。
Items
value: Number
date: Date
Calculations
calculation: Number
start_date: Date
end_date: Date
Calculation
是数据库中所有Item
的{{1}}值的存储计算,其日期介于Items
的开始日期和结束日期之间
我认为创建/更新Calculation
的好方法是在Calculations
集合上创建Mongo更改流,该流会监听Items
集合的更改,然后重新计算相关的{{ 1}}。
问题是,根据Mongo Change Event docs,删除文档时,Items
字段会被省略,这将阻止我访问已删除的Calculations
的日期,这会通知哪个fullDocument
应该被更新。
是否有任何方法可以访问由于文档删除而触发的Mongo更改事件的Item
?
答案 0 :(得分:1)
不,我不相信有办法。来自https://docs.mongodb.com/manual/changeStreams/#event-notification:
更改流仅通知已保留到副本集中大多数数据承载成员的数据更改。
当文档被删除并且删除在副本集中的大多数节点上持续存在时,该文档在副本集中不再存在。因此,changestream无法返回不再存在的内容。
您的问题的解决方案为transactions in MongoDB 4.0。也就是说,您可以通过一次原子操作来调整Calculations
并删除相应的Items
。