猫鼬-基于其他属性的findByIdAndUpdate runValidators

时间:2020-10-11 17:11:36

标签: javascript node.js mongoose

我正在尝试使用以下查询更新模型:

Model.findByIdAndUpdate(id, { min_age: 18, max_age: 24 }, { new: true, runValidators: true, setDefaultsOnInsert: true })

问题是我需要验证这些值是否彼此相对,例如以下查询

Model.findByIdAndUpdate(id, { min_age: 24, max_age: 18 }, { new: true, runValidators: true, setDefaultsOnInsert: true })

我到目前为止构建的模式是这样的:

let ageSchema = new mongoose.Schema({
    min_age: {
        type: Number,
        min: 18,
        max: 80,
        required: true,
        validate: {
            validator: function(value) { 
                return this.max_age >= value 
            },
            message: 'min_age has to be lower than or equal to max_age'
        }
    },
    max_age: {
        type: Number,
        min: 18,
        max: 80,
        required: true,
        validate: {
            validator: function(value) { 
                return this.min_age <= value 
            },
            message: 'max_age has to be greater than or equal to min_age'
        }
    }
})

验证可用于创建模型,但不幸的是,它不适用于更新数据。

创建模型时,this关键字引用了该模型,这使我可以访问此模型上的其他属性。

当我更新模型时,this关键字指的是全局变量,这使我无法访问此模型上的其他属性。

在更新过程中,是否有任何实用的方法可以基于其他属性来验证这些属性?

谢谢。

0 个答案:

没有答案