我有两个具有多对多关系的集合.我想在两个文档中存储一组链接的ObjectIds,以便我可以快速获取文档A并检索所有链接的文档B,反之亦然.
创建此链接是一个两步过程
在观看MongoDB视频后,我发现这是在两个集合之间存储多对多关系的推荐方法
我需要确保两个更新都已完成.在没有交易的情况下,强有力地处理这个至关重要的两步流程的建议方法是什么?
我可以将这种关系压缩成单个链接集合,其优点是单个更新,文档B没有机会错过文档A的链接.缺点是我没有按预期使用MongoDB.但是,因为只有一个更新,所以拥有定义多对多关系的链接集合似乎更加健壮.
我是否应该使用安全模式并手动检查数据后续进入并再次尝试失败?或者我应该只在其中一个集合中表示多对多关系,并依赖索引来确保我仍然可以快速获取链接文档?
有什么建议?谢谢
@Gareth,你有多种合法的方式来做到这一点.因此,关键问题是您计划如何查询数据(即:需要快速查询的内容)
这里有几种方法.
方法#1:"链接"集合
您可以构建一个仅包含集合之间映射的集合.
优点:
缺点:
方法#2:在较大的集合中存储较小映射的副本
例如:你有数百万Products,但只有一百Categories.然后你将Categories每个存储为一个数组Product.
优点:
缺点:
方法#3:存储两个集合中所有映射的副本
(你在暗示什么)
优点:
缺点:
我们来谈谈"需求交易".有几种方法可以进行交易,这实际上取决于您需要什么类型的安全性.
我是否应该使用安全模式并手动检查数据后续进入并再次尝试失败?
你绝对可以做到这一点.你必须问自己,如果只有一个保存失败,会发生什么最坏的情况?
方法#4:对更改进行排队
我不知道你是否曾经使用过队列,但是如果你有一些余地,你可以建立一个简单的队列,并有不同的工作来更新他们各自的集合.
这是一个更先进的解决方案.我倾向于选择#2或#3.
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |