我正在考虑如何在mongo中为网站构建我的数据库。以下是一个Event对象的数据外观:
-Event
- multiple teams
- multiple individual campaigns
- multiple donors
- one donation amount
我想在任何时间点知道活动中的捐赠总额。
我可以通过两种方式构建这个db:
最好的方法是什么? #1并在事件中保存总和?
由于
答案 0 :(得分:0)
因此,有一些标准可以将子集合转换为各自的集合,即问自己:
Team
s,其他实体可以引用Team
吗?如果是,那么这更可能是它自己的集合。对你的问题的恰当答案很可能是两种方法之间的混合,但首先要回答你的假设:
如果我将Event,Team,IndividualCampaign和Donor各自放入其自己的集合中,那么获取此总数将需要我假设的多个查询。
您可以使用Aggregation Framework
并依赖$lookup
运算符将其加入到单个查询中。从技术上讲,这可以满足您在单次往返中获取此总数的要求。
如果我将这一切都放在一个嵌套在数组中的巨型事件文档中,那么这听起来也不是一个好主意。
是的,对我来说这听起来也不是一个好主意。
那么你有几个选择:
例如,你可以拥有一个totalDonations
字段,每当事件的成员发生变化时你都会更新。但显然你在这里负责保持一致性。
最后,您应该评估数据的关系,如果您发现在域的大部分时间内遇到此问题,那么关系数据库可能是您的最佳选择。