I have a collection which describes requests. It looks like this:
const requestSchema = mongoose.Schema({
status: {
type: String,
required: true,
enum: ["available", "failed", "succeed"],
},
errorCode: { type: String , required : (when status is failed)},
});
My goal is to require errorCode
only if status
is set to 'failed'
and don't allow it to exist otherwise. And if possible to have it removed when status is changed to 'succeed'
for example. I can't quite find an answer anywhere.
CodePudding user response:
You could pass a function to required
to make errorCode
required only if status
is equal to "failed"
, like so:
const requestSchema = mongoose.Schema({
status: {
type: String,
required: true,
enum: ["available", "failed", "succeed"],
},
errorCode: {
type: String,
required: function () {
return this.status === "failed";
},
},
});
To remove it when status
changes to "succeed"
, or to any other value than "failed"
, you can use pre
method, like so:
requestSchema.pre("save", async function (next) {
if (this.status !== "failed") { // change it as you want
this.errorCode = "";
}
next();
});