在MongoDB中存储和组织数据的最佳方式

时间:2017-05-09 17:22:40

标签: mongodb

我在MongoDB中有一个用户,每个用户都有一个界面,允许他们将当前的饥饿状态设置为"饥饿","不饥饿",&#34饥饿","饥饿",或"完整"

每个用户都可以在任何时间段内输入多个选项。例如,一个用例将在早晨记录我的饥饿情况"并且用户可以放置"不饿..."和#34;完整"。他们可以记录他们在一天中的任何时间的饥饿程度,以及他们想要的次数。

我应该将数据存储为单个条目,然后在需要在UI中显示数据时,稍后在MongoDB中按日期对数据进行分组吗?或者我应该将数据存储为用户选择的选项数组以及日期吗?

2 个答案:

答案 0 :(得分:1)

这取决于您将来的查询,您可能希望同时执行这两项操作。磁盘空间比处理便宜,并且最好将磁盘空间加倍,而不是查询的两倍。

如果您只按日期映射,那么您希望按日期对所有用户/状态进行分组。如果您只是按用户进行地图设置,那么您希望按用户对所有日期/状态进行分组。如果您要同时进行查询,则应该制作两个集合以最小化处理。在任何一种情况下都绝对使用数组来表示饥饿状态。

日期分组的示例结构:

{ date: '1494288000',
time-of-day: [
{ am: [
{ user: asdfas, hunger-state: [hungry, full] },
{ user: juhags, hunger-state: [full] }
],
pm: [
{ user: asdfas, hunger-state: [hungry, full] },
{ user: juhags, hunger-state: [full] }
]}]}

答案 1 :(得分:0)

这取决于您将如何访问它。如果要报告用户的上次已知状态,则阵列可能更好:

{ 
   user_id: '5358e4249611f4a65e3068ab',
   timestamp: '2017-05-08T17:30:00.000Z',
   hunger: ['HUNGRY','FAMISHED'],
}

如果从new Date()传入输出,则多条记录的时间戳可能无法完全对齐(请注意第二条记录是99毫秒后):

{ 
   user_id: '5358e4249611f4a65e3068ab',
   timestamp: '2017-05-08T17:30:00.000Z',
   hunger: 'HUNGRY',
}

{ 
   user_id: '5358e4249611f4a65e3068ab',
   timestamp: '2017-05-08T17:30:00.099Z',
   hunger: ['FAMISHED',
}

您应该查看您的数据模型,并尝试获得更具确定性的状态模型。也许:

{ 
   user_id: '5358e4249611f4a65e3068ab',
   timestamp: '2017-05-08T17:30:00.000Z',
   isHungry: true,
   hunger: 'FAMISHED',
}