2016-08-30 13 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

スキーマ内の任意の参照を定義せずtype : ObjectIdとしてごdataを行い、ときにすることができますそれらを設定するには、からpopulateの異なるcollectionpathmodelを使用しますが、collectionからpopulateまでのいずれかを選択するには、logicが必要です。ここで

はあなたが同じことを行うことができる方法である。

inquirySchema 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

はニースの取り込み

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

、これは本当によく働きます。 – OllyBarca

関連する問題