食物记录的数据库模式

Database schema for food records

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

我有食物collection。 示例:

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

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

美食记录collection。示例:

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

而且我不确定在何处保存有关时段/日期的信息。我应该把它保存在食物记录中吗?

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

或者我应该为白天部分创建一个单独的 collection 吗?

最有效的方法是什么?

在 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,
    ...
   },
   ....
   ]
}

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

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