【发布时间】:2019-03-15 05:07:59
【问题描述】:
根据猫鼬built-in validators documentations,我可以使用条件必填字段:
const schema = mongoose.Schema({
a: {
type: String,
required: function () {
return this.b === 1
}
},
b: {
type: Number,
required: true
}
});
在此架构中,仅当属性 b 等于 1 时才需要属性 a。
尝试创建新文档按预期工作:
Model.create({ b: 1 }); // throws ValidationError (property a is required)
和
Model.create({ b: 2 }); // creates document
我的问题是尝试更新现有文档并将属性b 设置为1,因此应该需要属性a。
运行以下代码:
Model.findByIdAndUpdate(model._id, { b: 1 }, { new: true, runValidators: true});
意外地更新了文档,但没有抛出需要属性a 的错误。
我的猜测是验证只针对更新后的属性(属性b)而不是整个文档运行。
我不确定这是预期的行为还是错误...
我错过了什么吗? 有什么方法可以运行整个文档的验证器,而不仅仅是更新的属性,而无需之前手动获取文档?
【问题讨论】:
标签: node.js mongodb mongoose mongoose-schema