微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

等待循环 NodeJS 中的每个元素执行 findOneAndDelete 方法

如何解决等待循环 NodeJS 中的每个元素执行 findOneAndDelete 方法

我想在 mongoose 中作为 post findOneAndDelete 中间件执行模式统计信息。当我循环时,我的代码正在调用模式,但它只计算一个文档删除

我已经搜索了很多问题和答案,但还没有工作,

exports.deleteallAssociatedAns = catchAsync(async (req,res,next) => {
  const allAssocAnswers = await Answer.find({
    answerOfQuesId: req.params.quesId,});
  if (!allAssocAnswers || allAssocAnswers.length === 0) {
    next();
  }

  await Promise.all(
    Array.from(allAssocAnswers).map(async (el) => {
      const deletedAnswer = await Answer.findOneAndDelete({
        _id: el._id,});
      if (!deletedAnswer) {
        return next(new AppError('Something Went Wrong,Try Again!',404));
      }
    })
  );

 //Next Middleware
});

FindOneAndDelete 然后调用一个模式统计

answerSchema.statics.calcUserAnswerStatistics = async function (
  userId,status
) {
  const stats = await this.aggregate([
    {
      $match: { answerAuthor: userId },},{
      $group: {
        _id: '$answerAuthor',nAnswers: { $sum: 1 },]);
  if (stats.length > 0) {
    const user = await User.findById(userId);
    const userPoints = user.earnedPoints;
    const qnaCount = user.totalQnaCount;
    console.log(userPoints); **//This is consoling 4 Times If there is 4 Result but the below calculation is just calculating one time**

    if (status === 'new') {
      user.earnedPoints = userPoints + 5;
      user.totalQnaCount = qnaCount + 1;
      user.givenAnswersCount = stats[0].nAnswers;
    } else {
      user.earnedPoints = userPoints - 5; **//Just Decrease Ones**
      user.totalQnaCount = qnaCount - 1; **//Just Decrease Ones**
      user.givenAnswersCount = stats[0].nAnswers;
    }

    await user.save({ validateBeforeSave: false });
  } else {
    await User.findByIdAndUpdate(userId,{
      givenAnswersCount: 0,});
  }
};

answerSchema.post(/^findOneAndDe/,async function () {
  const ansOfQues = await Question.findById(this.r.answerOfQuesId);
  ansOfQues.answerCount -= 1; **//If there is Four Time Calls Count Should Decrease 4 in total but problem is it just decreasing one**
  await ansOfQues.save({ validateBeforeSave: false });

  await this.r.constructor.calcUserAnswerStatistics(
    this.r.answerAuthor,'deleted'
  ); **//This method is called 4 times but calculate only ones**
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?