2017-04-05 76 views
0

我的模式是如下:应元数据收集在mognoose引用或应该主要收集内部

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作为参考?

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

回答

0

我能想到三种情况在这里:

  1. 元数据是食品的卡车之间共享,并且是复杂的,即有多个领域,是不是唯一的
  2. 元数据是食品的卡车之间共享,但它是一个简单的串
  3. 复杂或简单,元数据不共享的(唯一的每种食品的卡车)

你只在1的情况下需要一个新的集合,因为否则你最终会replic在多辆食品卡车中登记(嵌入)相同的文件。不过,我宁愿保留foodtruck_meta_data_idfoodtruck,因为它将有助于获取元数据与populate

对于2 enum验证是简单而有效:

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

你应该嵌入文档或将一个字符串foodtruck_meta_data中的情况下,3