我有收藏集Project
,Group
和Item
。项目属于组,组属于项目。
项目经常更新,因此它们必须位于单独的集合中,但这些组几乎总是与项目一起创建。所以我想知道创建一个类似于:
的项目模式是否更好Project {
'id': String,
'name': String,
'groups': {
{
'id': String,
'total_amount': Number
}
},
total_amount: Number
}
但是我需要在项目和每个组中打印total_amount。我想由于MongoDB不支持关系模式,因此无法使用带注释的查询集来创建这些总和。所以,我想每次total_amount
文档中的amount
字段更新时,我都必须更新Item
字段。
如何确保更新total_amount
和Project
中的Group
以反映属于这些项目/群组的项目中的金额总和?上面提出的架构是否符合我的需求?我不认为使用Item.groupId
和Group.projectId
来模仿关系模式是一个大问题,但我不知道如何处理总数。
我还可以创建一个模板助手,它循环遍历子项并总计总和。但是我想每次加载页面时遍历所有对象都会耗费大量内存。
答案 0 :(得分:1)
一个可靠的规则是,如果在groups
的上下文中通常需要projects
,那么在groups
中嵌入projects
是最佳解决方案。
现在,关于total_amount
:由于无法在项目之间共享组,我相信每次项目更改时更新total_amount
都是完全正常的。如果您的应用很小并且items
没有经常更新,那么这没有任何问题(它实际上只增加了1次写入操作)。