【发布时间】:2014-12-10 04:14:47
【问题描述】:
我正在使用 MongoDB,但我对它很陌生,所以我希望您能帮助我了解如何为我的数据建模。什么是最有效的方法?
这是我的用例。
假设我有三个收入来源,分别命名为 Income1、Income2、Income3。明天他们可能是 4 或 20 岁。每个新的收入来源都会假设要实施新的整合。
假设我有十个用户,分别命名为 User1、User2...User10。明天他们可能是 1000 个。(我希望 ;-))。在这里,新用户无需集成。
假设我有兴趣存储用户1 从Income1、Income2、...用户2 从Income1、Income2...得到的钱,等等。甚至有一天我会汇总所有这些。
还在关注我吗?
我应该如何建模?
第一个想法:分离集合和分离文档
3 集合:Income1、Income2、Income3。如果出现 Income4,没问题,因为我必须添加一些代码,我还可以创建一个新集合。没什么大不了。
在每个集合中,一个用户的数据,每个用户和每个日期都有一个文档,如下所示:
Income 1
{name:'user1', date:'2014-12-07',money:'24.32'}
{name:'user1', date:'2014-12-08',money:'14.20'}
{name:'user2', date:'2014-12-07',money:'0.00'}
{name:'user2', date:'2014-12-08',money:'0.00'}
{name:'user2', date:'2014-12-09',money:'10.00'}
{name:'user3', date:'2014-12-09',money:'124.32'}
Income 2
{name:'user1', date:'2014-12-05',money:'4.00'}
{name:'user2', date:'2014-12-06',money:'0.20'}
第二个思路:分离集合,同文档+内嵌文档
3 集合和以前一样。在每个集合中,一个用户的数据,每个用户一个文档:
Income 1
{name:'user1', incomes:
[{date:'2014-12-07',money:'24.32'},{date:'2014-12-08',money:'14.20'}]}
{name:'user2', incomes:
[{date:'2014-12-07',money:'0.00'},{date:'2014-12-08',money:'0.00'},{date:'2014-12-09',money:'10.00'}]}
{name:'user3', incomes:
[{date:'2014-12-09',money:'124.32'}]}
Income 2
{name:'user1', incomes: [{date:'2014-12-05',money:'4.00'}]}
{name:'user2', incomes:[{date:'2014-12-06',money:'0.20'}]}
第三个想法:相同的集合,并为每个人提供单独的文档。
{income_type:1,name:'user1', date:'2014-12-07',money:'24.32'}
{income_type:1,name:'user1', date:'2014-12-08',money:'14.20'}
{income_type:1,name:'user2', date:'2014-12-07',money:'0.00'}
{income_type:1,name:'user2', date:'2014-12-08',money:'0.00'}
{income_type:1,name:'user2', date:'2014-12-09',money:'10.00'}
{income_type:1,name:'user3', date:'2014-12-09',money:'124.32'}
{income_type:2,name:'user1', date:'2014-12-05',money:'4.00'}
{income_type:2,name:'user2', date:'2014-12-06',money:'0.20'}
这些是一些想法。我确定还有其他人。
我经常需要针对每个用户查询最近的文档(即最近的日期)。我可能不时需要每周、每月汇总信息……最后,我想我会从每晚运行的 cron 更新表格(为每个收入来源和用户添加相应的收入)
这清楚吗?我来自关系数据库背景(这很明显吗?)所以也许有一些我什至没有考虑过。
提前致谢。
【问题讨论】:
标签: node.js mongodb query-optimization data-modeling