2016-08-30 4 views
0

У меня есть запрос схема:Mongoose динамического суб документ схема

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

вы можете сделать свой data как type : ObjectId без определения каких-либо ссылок в схеме, и когда вы хочу, чтобы заполнить их, используйте path и model в populate к populate из разных collection, но вы должны иметь logic для выбора, какой collection к populate с.

Вот как вы можете сделать то же самое:

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

Nice, это работает очень хорошо. – OllyBarca

Смежные вопросы