Tengo una colección que describe las solicitudes. Se parece a esto:
const requestSchema = mongoose.Schema({ status: { type: String, required: true, enum: ["available", "failed", "succeed"], }, errorCode: { type: String , required : (when status is failed)}, }); Mi objetivo es requerir el código de errorCode solo si status se establece en 'failed' y no permitir que exista de otra manera. Y, si es posible, eliminarlo cuando el estado cambie a 'succeed' por ejemplo. No puedo encontrar una respuesta en ningún lado.
Puede pasar una función a required para hacer que el código de errorCode sea obligatorio solo si status es igual a "failed" , así:
const requestSchema = mongoose.Schema({ status: { type: String, required: true, enum: ["available", "failed", "succeed"], }, errorCode: { type: String, required: function () { return this.status === "failed"; }, }, }); Para eliminarlo cuando el status cambia a "succeed" , o a cualquier otro valor que no sea "failed" , puede usar el método pre , así:
requestSchema.pre("save", async function (next) { if (this.status !== "failed") { // change it as you want this.errorCode = ""; } next(); });