猫鼬条件必填字段

时间:2021-06-10 12:14:39

标签: node.js mongodb mongoose mongoose-schema

应该定义架构,以便当属性 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 总是需要。

1 个答案:

答案 0 :(得分:1)

使用Model.validate(),您需要将上下文作为第三个参数传递才能使其正常工作。类似于此 issue 中提到的 Model.validate({a: true}, ['b'], {a: true})。或者您可以改用 Document.prototype.validate()

let model = new Model({a: true}); 
model.validate();