应该引用mognoose中的元数据集合,还是应该在main集合中

时间:2017-04-05 03:27:08

标签: mongoose mongoose-schema

我的架构如下:

foodtruck.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Items = require('./items.js');


var FoodTruckSchema = new Schema({
    foodtruck_name:String,
    foodtruck_location:String,
    foodtruck_rating:{type:Number,default:5},
    foodtruck_total_votes:{type:Number,default:0},
    foodtruck_tag:String,
    foodtruck_open_status:{type:Number,default:1},   //0 open 1 closed
    foodtruck_starting_timing:String,
    foodtruck_closing_timing:String,
    foodtruck_cusine:[String],
    foodtruck_img:String,
    foodtruck_logo:String,
    item_list: [ {type : mongoose.Schema.ObjectId, ref : 'items'}]
},{ versionKey: false });



module.exports = mongoose.model('foodtruck',FoodTruckSchema);

现在,我想要做的是,我想添加 foodtruck_meta_data:[String] 。我应该创建另一个集合 xyz ,我在其中提供此元字段,然后提供 foodtruck_id 作为参考?

或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我可以在这里考虑三种情况:

  1. 元数据在食物卡车之间是可共享的,并且很复杂,即具有多个字段并且不是唯一的
  2. 元数据可以在食物卡车之间共享,但它是一个简单的字符串
  3. 复杂或简单的元数据不可共享(每个食品卡车都是唯一的)
  4. 仅在案例1中需要新的集合,否则您将最终在多个食品卡车中复制(嵌入)相同的文档。不过,我希望将foodtruck_meta_data_id保留在foodtruck中,因为它有助于使用populate获取元数据。

    2 enum验证简单而有效:

      foodtruck_meta_data: {
            type: String,
            enum: ['meta1', 'meta2', 'meta3'],
            required: true
          }
    

    如果是3,你应该在foodtruck_meta_data中嵌入一个文件或放一个字符串。