繁体   English   中英

猫鼬动态子文档架构

[英]Mongoose dynamic sub document schema

我有一个查询模式:

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

我想用子文档填充“数据”属性字段,但我希望它接受不同的子文档架构。 我有一个“事件”和一个“属性”子模式,可以作为“数据”插入。 如何在我的查询模式中允许这样做? 看来我必须实际指定它期望的WHICH子文档架构。

我的孩子模式:

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 }
});

你可以让你datatype : ObjectId没有定义模式中的任何引用,当你想填充它们,使用pathmodelpopulatepopulate不同collection ,但你必须有一个logic的选择,其collectionpopulate从。

您可以按照以下步骤进行操作:

查询模式

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){...});
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM