2016-08-30 134 views
0

我有一個查詢模式:貓鼬動態子文檔模式

const inquirySchema = new mongoose.Schema({ 
    client: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Client' }], 
    data: dynamicSchema? 
}, { 
    timestamps: true 
}); 

我想填充「數據」屬性字段與子文檔,但我想它接受不同的子文檔架構。我有一個可以作爲「數據」插入的「事件」和「屬性」子模式。我如何在我的查詢模式中允許這個?看來我有實際指定哪些子文檔模式,預計...

我的孩子模式:

const eventSchema = new mongoose.Schema({ 
    name: { min: Number, max: Number }, 
    date: { type: Date }, 
    zone: { type: String } 
}); 

const propertySchema = new mongoose.Schema({ 
    price: { min: Number, max: Number }, 
    status: { type: String }, 
    zone: { type: String } 
}); 

回答

1

,你可以讓你的datatype : ObjectId沒有定義模式中的任何引用,當你要填充這些,從不同collection使用pathmodelpopulatepopulate,但你必須有一個logic從選擇其中collectionpopulate

這裏是你如何能做到相同的:

inquirySchema

const inquirySchema = new mongoose.Schema({ 
    client: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Client' }], 
    data: { type: mongoose.Schema.Types.ObjectId } 
}, { 
    timestamps: true 
}); 

填充data

if(isEvent) 
{ 
    //Populate using Event collection 
    Inquiry.find({_id : someID}). 
      populate({path : 'data' , model : Event}). 
      exec(function(err,docs){...}); 
} 
else if(isProperty) 
{ 
    //Populate using Property collection 
    Inquiry.find({_id : someID}). 
      populate({path : 'data' , model : Property}). 
      exec(function(err,docs){...}); 
} 
+0

尼斯,這個作品真的很好。 – OllyBarca