如何根据用户的输入创建可以更改的架构?

时间:2017-05-20 18:56:50

标签: mongodb express mongoose

仅仅为了测试,我正在为UberEAT创建一个类似的应用程序。

数据库可能会达到集合限制,因此我创建了两个单独的集合。

首先,我需要餐厅信息,所以我的结构如下:

var PlaceSchema = new Schema({
  id: Number,
  menuID: Number,
  name: String,
  cuisine_type: String, (eg; thai, korean, sushi ,etc)
  address: String,
  opening_time:Date,
  closing_time:Date
});

然后我需要显示餐厅的菜单,问题是每个餐厅都有不同数量的菜肴和价格,所以数量不恒定。

这是我构建菜单数据的方式,但我知道这是完全错误的

var MenuSchema = new Schema({
  id: Number,
  parentID: Number,
  name: String,
  price: Number

});

任何指导都会很棒!

1 个答案:

答案 0 :(得分:1)

如何开始

for restuarant

var PlaceSchema = new Schema({
  id: Number,
  menusId: [Number],
  name: String,
  cuisine_type: String, (eg; thai, korean, sushi ,etc)
  address: String,
  opening_time:Date,
  closing_time:Date
});

和菜单

var MenuSchema = new Schema({
  id: Number,
  placeId: Number,
  dishes: [{name: String, price: Number}] //add any other dish related stuff here, like spiceness, app, entree, desert chef special etc etc
});

现在,您可以为一个地方提供多个菜单,并在菜单中设置多个菜肴。 您甚至可以在菜单中执行一系列地点ID,如果餐馆的菜单相同,可能会出现这种情况。

var MenuSchema = new Schema({
  id: Number,
  placesId: [Number],
  dishes: [{name: String, price: Number}] //add any other dish related stuff here, like spiceness, chef special etc etc
});

针对默认饮品进行了更新 这是一个带饮料的更新菜单架构     var MenuSchema = new mongoose.Schema({     身份证号码,     placeId:数字,     菜肴:[{name:String,price:Number}],//在这里添加任何其他菜相关的东西,如spiceness,app,entree,沙漠厨师特等等

 drinks:[{
    name: String,
    price: Number
    }]
 });

就像我在评论中所说的那样,mongoose对数组没有任何默认值。 但是我们可以编写一个预保存挂钩来处理这个问题。

MenuSchema.pre("save", function (next) {
    if (!this.drinks.length) {
        this.drinks.push({name: "No Drinks", price: 0}); //null or 0 whichever you pefer
    }
    next();
});

如上所述,这将默认为默认对象。

P.S。这种默认饮料“没有饮料”虽然感觉不对。也许保持它为一个空数组,当我们需要在代码中使用它,显示或只是检查长度。

  if (!menu.drinks.length) {
     console.log("No drinks");
  }