Mongoose是否支持,或者是否有可用的包支持阵列中嵌入式模式的多个“选项”?
例如, thing 属性只能包含两个模式中的一个:
new Schema({
things: [{
requiredProp: String,
otherProp: Number
}, {
otherOption: Number
}]
});
换句话说,我不想只允许任何(AKA Schema.Types.Mixed)存储在此属性中,而只是存储这两种可能的定义。
或者,是否存在架构设计建议以避免此问题?
答案 0 :(得分:3)
您应该只在模式的数组类型中定义一个dict,然后使用mongoose模式类型逻辑设置它们是否需要。如果你想做更多逻辑以确保已经设置了其中一个字段,请使用预存储,如下所示:
var MySchema = new Schema({
things: [{
requiredProp: {type: String, required: true},
otherProp: Number,
otherOption: Number,
}]
});
MySchema.pre('save', function(next) {
if (!this.otherProp && !this.otherOption) {
next(new Error('Both otherProp and otherOption can\'t be null'))
} else {
next()
}
})
如果没有设置otherProp和otherOption,则保存对象会返回错误。