Meteor中儿童对象的求和字段

时间:2015-06-30 10:14:39

标签: javascript node.js mongodb meteor nosql

我有收藏集ProjectGroupItem。项目属于组,组属于项目。

项目经常更新,因此它们必须位于单独的集合中,但这些组几乎总是与项目一起创建。所以我想知道创建一个类似于:

的项目模式是否更好
Project {
    'id': String,
    'name': String,
    'groups': {
        {
            'id': String,
            'total_amount': Number
        }
    },
    total_amount: Number
}

但是我需要在项目和每个组中打印total_amount。我想由于MongoDB不支持关系模式,因此无法使用带注释的查询集来创建这些总和。所以,我想每次total_amount文档中的amount字段更新时,我都必须更新Item字段。

如何确保更新total_amountProject中的Group以反映属于这些项目/群组的项目中的金额总和?上面提出的架构是否符合我的需求?我不认为使用Item.groupIdGroup.projectId来模仿关系模式是一个大问题,但我不知道如何处理总数。

修改

我还可以创建一个模板助手,它循环遍历子项并总计总和。但是我想每次加载页面时遍历所有对象都会耗费大量内存。

1 个答案:

答案 0 :(得分:1)

一个可靠的规则是,如果在groups的上下文中通常需要projects,那么在groups中嵌入projects是最佳解决方案。

现在,关于total_amount:由于无法在项目之间共享组,我相信每次项目更改时更新total_amount都是完全正常的。如果您的应用很小并且items没有经常更新,那么这没有任何问题(它实际上只增加了1次写入操作)。