猫鼬条件必填字段

Mongoose conditional required field

应定义模式,以便属性 b 是必需的,前提是属性 a 设置为 false。

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总是需要的。

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

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