Mongoose 条件必填字段

问题描述 投票:0回答:2

应定义模式,以便当属性

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。

node.js mongodb mongoose mongoose-schema
2个回答
1
投票

使用

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

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

0
投票

可以在模式对象上声明

$cond
属性并具有
if
else
语句。

示例:

b: {
   type: String,
   $cond: {
     if: { $eq: ["$a", false] },
     then: { required: true },
     else: { required: false },
  },
}

根据注册方法,我必须将其用于密码字段。希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.