Пользовательские методы MongoDB для изменения одних данных при утверждении двух других данных

#node.js #mongodb #mongoose

#node.js #mongodb #mongoose

Вопрос:

Сотрудник покидает приложение. Когда администратор одобрит и менеджер одобрит, я хочу, чтобы статус утверждения был обновлен до утвержденного.

 const leaveSchema = mongoose.Schema(
  {
    user: {
      type: mongoose.Schema.ObjectId,
      ref: "User",
      required: [true, "It must belong to a user"],
    },
    adminApproval: {
      type: String,
      enum: ["Pending", "Approved", "Rejected"],
    },
    managerApproval: {
      type: String,
      enum: ["Pending", "Approved", "Rejected"],
    },
    approvalStatus: {
      type: String,
      enum: ["Pending", "Approved", "Rejected"],
      default: "Pending",
    },
    active: {
      type: Boolean,
      default: true,
    },
  },
);
  

Комментарии:

1. можете ли вы предоставить образец выходных данных или уточнить свой вопрос

2. Что я понял из вашего объяснения, так это то, что если в базе данных одобрены adminApproval amp; managerApproval , то approvalStatus будут одобрены независимо от того, что это Pending в базе данных?

Ответ №1:

Вы могли бы написать промежуточное программное обеспечение для проверки этого после любого сохранения документа этой модели.

 const leaveSchema = mongoose.Schema(
{
   user: {
      type: mongoose.Schema.ObjectId,
      ref: "User",
      required: [true, "It must belong to a user"],
   },
   adminApproval: {
      type: String,
      enum: ["Pending", "Approved", "Rejected"],
   },
   managerApproval: {
      type: String,
      enum: ["Pending", "Approved", "Rejected"],
   },
   approvalStatus: {
      type: String,
      enum: ["Pending", "Approved", "Rejected"],
      default: "Pending",
   },
   active: {
      type: Boolean,
      default: true,
   },
});

leaveSchema.post('save', function(doc) {
   if (doc.adminApproval === 'Approved' amp;amp; doc.managerApproval === 'Approved' amp;amp; doc.approvalStatus !== 'Approved') {
      doc.approvalStatus = 'Approved';
      doc.save();
   }
};
  

Комментарии:

1. Спасибо за помощь, сэр… Я сделал это с помощью pre hook или как там это называется, но это сработало. Спасибо, что нашли время помочь мне…