只验证父项上的新子文档保存在猫鼬中?

时间:2018-08-22 18:03:43

标签: node.js mongodb mongoose mongoose-schema

我有以下架构:

var childSchema = mongoose.Schema({
   aValue: {
      type: String
      validate: {
         validator: aValidator
      }
   }
})

var parentSchema = mongoose.Schema({
   children: [childSchema]
})

每次将新的子代添加到父代并保存父代时,都会对该父代的所有子代执行验证器。由于先前保存的子文档已经通过验证,因此这会导致很多不必要的计算。

也许我在这里错过了一些东西,但是有没有一种方法可以防止每次保存时都对所有子文档进行验证?

感谢您的帮助。

1 个答案:

答案 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回调会收到该错误