为什么Mongoose不validation空文档?

比方说,我有一个非常简单的架构与自定义validationfunction,总是返回false。

var MofoSchema = new mongoose.Schema({ name: String }); MofoSchema.path('name').validate(function (value) { console.log("I'm validating"); return false; }, 'No pasaran'); mongoose.model('Mofo', MofoSchema); 

然后我创build一个新的文档实例,并validation它:

 var Mofo = mongoose.model('Mofo'); var mofo = new Mofo({name: "Tarte flambée"}); mofo.validate(function(err) { console.log(err); }); 

完美的是,自定义validation器function被调用, err被填充。

但是现在我也是这样做,没有数据

 var Mofo = mongoose.model('Mofo'); var mofo = new Mofo({}); mofo.validate(function(err) { console.log(err); }); 

自定义validation器函数未被调用err未定义。 为什么? 我不明白为什么Mongoose没有运行自定义validation器。

这是行为的devise? 这是一个错误? 我应该扭转局面吗? 我应该在validation之前手动检查空数据吗?

难道我做错了什么?

PS:如果你打电话save ,尽pipe自定义validation器,文档将保存在MongoDB中为空。

我认为mongoose只会validation现有的领域。

所以你可以使用'空'值来激活validation

 var mofo = new Mofo({name: null}); 

对于空或未定义

 var MofoSchema = new mongoose.Schema({ name: {type: String, required: true} }); MofoSchema.path('name').validate(function (value) {...}, 'no pasaran'); 

你可以做:

 var mofo = new Mofo({ name: { type: String, default: ''} }); 

这将确保您始终有一个关键的价值来触发validation。 这也使您的架构定义更易于阅读。