食物记录的数据库模式

时间:2015-11-05 17:05:18

标签: mongodb database nosql

我正在创建一个卡路里计数网页。而且我不确定食物记录的MongoDB数据库模式。它应该像这样工作:

  • 日分为部分(早餐,午餐,晚餐)
  • 您可以将食物记录保存到其中一个部分中。例如鸡蛋 - 3x50(克)(3个鸡蛋)
  • 每天都有一个页面。页面分为日期部分,此处列出了记录的食物。有食物信息 - 卡路里计数/蛋白质/ ...每食物/天部分/天

我有食物收藏。 例如:

{ 
  _id: ObjectID("X"),
  name: "egg",
  calories: 140,
  protein: 12,
  ...
}

(每100克卡路里和蛋白质)

食物记录收集。例如:

{
  food: ObjectID("X"),
  count: 3,
  weight: 50
}

我不知道在哪里保存有关日期/天的信息。我应该把它保存在食物记录中吗?

{
  food: ObjectID("X"),
  count: 3,
  weight: 50,
  day: "2015-11-05",
  part: "lunch"
}

或者我应该为日期部分创建单独的集合吗?

最有效的方法是什么?

1 个答案:

答案 0 :(得分:3)

在MongoDB中,您的架构设计在很大程度上取决于

a)集合的大小(记住有16MB的集合上限) b)您将如何查询数据

由于您希望看到早餐,午餐和晚餐的内容,您可以使用此架构:

{
   "_id": ObjectId(....),
   "day": "2015-12-01"
   "part": "lunch",
   "foodEaten": [
   {
    "foodName": "eggs", 
    "serving": 2,
    "caloriesPerServe": 21,
    "proteinsPerServe": 34,
    ...
   }, 
   {
    "foodName": "pancakes", 
    "serving": 3,
    "caloriesPerServe": 367,
    "proteinsPerServe": 0.23,
    ...
   },
   ....
   ]
}

如果您有用户,则可以通过添加用户密钥来链接用户:value(用户信息将位于另一个集合中)。如果您认为该系列将超过16MB的上限,您可以创建一个单独的食物集合并在foodEaten数组中引用它。由于我不知道您的项目范围,我不知道是否会出现这种情况,但我相信这可能是您数据库的最佳架构。

您可以查看MongoDB文档以获取更多信息,或this video