首页 > 解决方案 > 猫鼬有条件的必填字段

问题描述

应该定义模式,以便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 。

标签: node.jsmongodbmongoosemongoose-schema

解决方案


使用Model.validate(),您需要将上下文作为第三个参数传递以使其正常工作。就像这个问题Model.validate({a: true}, ['b'], {a: true})中提到的那样。或者您可以改用:Document.prototype.validate()

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

推荐阅读