【问题标题】:Mongoose conditional required field猫鼬有条件的必填字段
【发布时间】:2021-08-27 10:44:04
【问题描述】:

应该定义架构,因此如果属性 a 设置为 false,则需要属性 b

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。我去掉了感叹号,所以符合描述,但问题还是一样。
    • 你用的是哪个猫鼬版本?
    • 猫鼬版本是5.12.13。
    • 我已经对此进行了测试,它按预期工作。你能展示用于创建文档的代码吗?
    • 感谢您自己测试。通过更改感叹号,我不一致地更改了代码sn -p。我现在已经相应地调整了 sn-p。
    猜你喜欢
    • 2019-03-15
    • 2021-05-06
    • 2016-06-20
    • 2021-10-07
    • 2014-07-29
    • 2014-01-08
    • 2015-06-04
    • 2016-05-22
    • 2015-11-27
    相关资源
    最近更新 更多