我的API将接收的数据包含两个密钥之一,option1
或option2
,但不是两个。
我想在我的猫鼬模式中强制执行该行为,但是什么也没找到,可以链接两个键并确保其中一个(只有一个)存在吗?
示例代码:
const exampleSchema = new mongoose.Schema({
custRef: {
type: String,
required: true,
trim: true
},
option1: {
type: Number
},
option2: {
type: Number
}
});
示例JSON 1:
{
"custRef": "abc123",
"option1": 456
}
示例JSON 2:
{
"custRef": "abc789",
"option2": 010
}
答案 0 :(得分:0)
您可以使用这样的预验证钩子:
(请注意,为简单起见,我删除了custRef字段)
const mongoose = require("mongoose");
const exampleSchema = new mongoose.Schema({
option1: {
type: Number
},
option2: {
type: Number
}
});
exampleSchema.pre("validate", function(next) {
//console.log(this);
if (this.option1 && this.option2) {
let err = new Error("Both options not allowed");
err.status = 400;
next(err);
} else if (!(this.option1 || this.option2)) {
let err = new Error("One of the options is required");
err.status = 400;
next(err);
}
next();
});
const Example = mongoose.model("Example", exampleSchema);
const example = new Example({});
example.validate().catch(err => {
console.log(err.message);
});
这可能不适用于更新操作,所以要小心。
文档: