2

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

例如,things属性只能包含以下两种模式之一:

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

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

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

4

1 回答 1

3

您应该只在模式的数组类型中定义一个字典,然后使用 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 ,则保存对象时将返回错误。

于 2013-12-19T11:12:05.807 回答