我有以下架构:
var childSchema = mongoose.Schema({
aValue: {
type: String
validate: {
validator: aValidator
}
}
})
var parentSchema = mongoose.Schema({
children: [childSchema]
})
每次将新的子代添加到父代并保存父代时,都会对该父代的所有子代执行验证器。由于先前保存的子文档已经通过验证,因此这会导致很多不必要的计算。
也许我在这里错过了一些东西,但是有没有一种方法可以防止每次保存时都对所有子文档进行验证?
感谢您的帮助。
答案 0 :(得分:0)
文档中有一个validateBeforeSave选项,可以防止在手动保存和处理验证之前进行验证。
如果将其设置为false
,则可以手动验证记录(只有要确保其有效的部分),然后保存它。
文档中的代码为您提供方便:
var schema = new Schema({ name: String });
schema.set('validateBeforeSave', false);
schema.path('name').validate(function (value) {
return v != null;
});
var M = mongoose.model('Person', schema);
var m = new M({ name: null });
m.validate(function(err) {
console.log(err); // Will tell you that null is not allowed.
});
m.save(); // Succeeds despite being invalid
但除此之外,docs非常简单:
验证是异步递归的;当您调用Model#save时,也会执行子文档验证。如果发生错误,您的Model#save回调会收到该错误