如果某些更改验证失败,Mongoose是否可以继续保存?

时间:2016-04-20 00:51:21

标签: node.js mongoose

在我的架构中,我已经为某些键设置了最小长度要求。

mphone: {type: String, minlength: 1},
hphone: {type: String, minlength: 1},
wphone: {type: String, minlength: 1},

上述信息通过用户提交的表单填充。当用户提交表单时,运行以下命令将信息保存到数据库。

 var query = Sample.where({'sample.email' : username});
 query.findOne(function(err, sample) {
    if(err) {
        console.error(err);
    }
    else {
        sample.mphone = req.body.mphone;
        sample.hphone = req.body.hphone;
        sample.wphone = req.body.wphone;

        sample.save(function(err) {
            if(err) console.error(err);
        });
    }

但是,如果用户仅填写表单中的一个字段并提交它(例如,仅填写mphone),由于对模式的验证,将拒绝整个保存操作。是否有一个设置允许Mongoose简单地拒绝无效字段并保存,比如只保存mphone?我想我可以单独测试和保存每个,但我想知道是否有更有效的方法。

1 个答案:

答案 0 :(得分:0)

根据文档,某些操作(例如create())将完全跳过验证。

也就是说,如果您的规则是至少填写了一个字段,那么您应该使用验证中间件。像这样(未经测试):

SampleSchema.pre('validate', function(next){
   if(!this.mphone && !this.hphone && !this.wphone) return next(new ValidationError('At least one type of phone is needed!')); 
   next();
});