用于模式定义的Mongoose OR运算符

时间:2013-11-06 22:46:56

标签: mongodb mongoose

Mongoose是否支持,或者是否有可用的包支持阵列中嵌入式模式的多个“选项”?

例如, thing 属性只能包含两个模式中的一个:

new Schema({
    things: [{
        requiredProp: String,
        otherProp: Number
    }, {
        otherOption: Number
    }]
});

换句话说,我不想只允许任何(AKA Schema.Types.Mixed)存储在此属性中,而只是存储这两种可能的定义。

或者,是否存在架构设计建议以避免此问题?

1 个答案:

答案 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,则保存对象会返回错误。