2017-11-03 9 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"배열을 확인해야합니다. 누군가가 특정 필드 (이 경우 '형식')를 기반으로 하위 문서의 배열을 확인할 수있는 방법을 말해 줄 수 있습니까?

도움을 주시면 감사하겠습니다.

+0

나는 또한이 같은 문제를 겪고 있으며 나를 도울 사람을 기다리고 있습니다. 건배 – kaibuki

+0

해결 방법을 찾을 수 있으면 알려주십시오. –

답변

0

몽구스의 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))

그런 식으로, 차량 유형에 따라 스키마 (모두 부모 스키마를 상속, 적절한 부속 유형 유효성을 검사합니다 이 경우 전달 된 '유형'을 기준으로 typeVehicleSchema)을 입력하십시오.