在我的架构中,我已经为某些键设置了最小长度要求。
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?我想我可以单独测试和保存每个,但我想知道是否有更有效的方法。
答案 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();
});