2017-11-03 12 views
1

私は異なるサブ文書型の配列を持つスキーマを持っています。スキーマ以下 は一例です:Mongoose - 異なるサブ文書型の配列を検証する

VehicleSchema:

let BikeSchema = new Schema({ 
    title  : { type: String, required: [true, 'title is required'] }, 
    type  : { type: String, required: true, default: "bike" }, 
    tyres  : { type: Number, required: true, min: 2} 
}); 

let TruckSchema = new Schema({ 
    title  : { type: String, required: [true, 'title is required'] }, 
    type  : { type: String, required: true, default: "truck" }, 
    tyres  : { type: Number, required: true, min: 4}, 
    doors  : { type: Number, required: true} 
}); 

let VehicleSchema = new Schema({ 
    name: {type:String, required: [true, 'name is required']}, 
    vehiclesSelected: [BikeSchema, TruckSchema], 
}); 

Below is the json that I need to validate: 
vehicle = { 
    "name": 'abc', 
    "vehiclesSelected": [ 
    {"type": "truck", doors: 2}, 
    {"type": "bike", tyres: 3}, 
    {"type": "bike"} 
    ] 
} 

今私はJSONに渡された「タイプ」に基づいて「vehiclesSelected」配列を検証する必要があります。誰かが特定のフィールド(この場合は 'type')に基づいてサブ文書の 配列を検証する方法を教えてもらえますか?

ご協力いただければ幸いです。

+0

私はまた、同じ問題を抱えています。歓声 – kaibuki

+0

あなたが解決策を見つけることができれば、私に教えてください。 –

答えて

0

あなたは、Mongooseのdiscriminator()関数を利用することができます。あなたのケースでは

、何を行うことができますことは次のとおりです。

let BikeSchema = new Schema({ 
 
    title  : { type: String, required: [true, 'title is required'] }, 
 
    tyres  : { type: Number, required: true, min: 2} 
 
}); 
 

 
let TruckSchema = new Schema({ 
 
    title  : { type: String, required: [true, 'title is required'] }, 
 
    tyres  : { type: Number, required: true, min: 4}, 
 
    doors  : { type: Number, required: true} 
 
}); 
 

 
let typeVehicleSchema = new Schema({}, 
 
discriminatorKey: 'type', _id: false}) 
 

 
let VehicleSchema = new Schema({ 
 
    name: {type:String, required: [true, 'name is required']}, 
 
    vehiclesSelected: [typeVehicleSChema], 
 
}); 
 

 
VehicleSchema.path('vehiclesSelected').discriminator('truck', new Schema(TruckSchema)) 
 
VehicleSchema.path('vehiclesSelected').discriminator('bike', new Schema(BikeSchema))

そのように、車両の種類に応じて、あなたのスキーマは、両方の親スキーマを継承し、適切なサブタイプが検証されます(このケースでは、型のベクタスキーマ)は、渡された '型'に基づいています。

関連する問題