应该定义架构,以便当属性 b
设置为 false 时需要属性 a
。
const { Schema, model } = require("mongoose");
const schema = new Schema({
a: { type: Boolean, default: false },
b: {
type: Number,
required: function () {
return !this.a;
}
}
});
const Model = model("bla", schema);
Model.validate({a: true});
但如果我如上定义架构,最后一行中的验证调用将抛出一个错误,指出 b
是必需的,即使 a
设置为 false
:>
ValidationError: Validation failed: b: Path `b` is required.
问题在于,这不是指模式,而是指函数,并且没有定义值 a
,所以函数只会评估为 true
并且 b 总是需要。
答案 0 :(得分:1)
使用Model.validate()
,您需要将上下文作为第三个参数传递才能使其正常工作。类似于此 issue 中提到的 Model.validate({a: true}, ['b'], {a: true})
。或者您可以改用 Document.prototype.validate()
:
let model = new Model({a: true});
model.validate();