如何解决等待循环 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
});
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 举报,一经查实,本站将立刻删除。