node.js - 猫鼬有条件的必填字段
问题描述
应该定义模式,以便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()
,您需要将上下文作为第三个参数传递以使其正常工作。就像这个问题Model.validate({a: true}, ['b'], {a: true})
中提到的那样。或者您可以改用:Document.prototype.validate()
let model = new Model({a: true});
model.validate();
推荐阅读
- java - 以 ServletContext 作为参数的工厂方法与构造函数
- angular - ionic Framework 3 firebase google 身份验证
- php - 管理员 Woocommerce 产品列表页面中显示的自定义价格计算
- python - 仅从二进制文件python中的字典中读取某些键
- node.js - 未加载 require 的模块的 Jest/Istanbul 覆盖率
- android - 如何在 RecylerView 中显示来自 Android 中 Firestore 的多个集合的数据
- java - 拆分 JavaFX 控制器类
- ui-grid - 根据行过滤ui网格值复选框被选中
- rest - Magento REST API 无法添加产品(Nonce 和无效属性 SKU)
- mapbox - 用于分隔重叠线的 Mapbox 样式