提问者:小点点

我怎么知道做了多少次考试


我有3个集合,类别,考试和结果。

对于每一个类别,我都有一些考试。如果完成了一个检查,我将它们的结果添加到“result”集合中。

我参加了每个类别所有考试。问题是我数不清有多少是做的。

这是我现在得到的:

{ category: "Test", total_exams: 10 }

这就是我想要的:

{ category: "Test", total_exams: 10, done_exam: 4 }

下面你可以看到我到现在都做了些什么:

https://mongoplayground.net/P/upsapkye4dr


共1个答案

匿名用户

快速修复:

    阶段,让它传递 阶段匹配表达式, 与表达式外的条件匹配/li> 中的文档总数
db.categories.aggregate([
  {
    $lookup: {
      from: "exams",
      localField: "_id",
      foreignField: "categoryId",
      as: "examsCount"
    }
  },
  {
    $lookup: {
      from: "results",
      let: { examId: "$examsCount._id" },
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [{ $in: ["$exam_id", "$$examId"] }]
            },
            user_id: 22222222
          }
        },
        { $count: "count" }
      ],
      as: "doneExams"
    }
  },
  {
    $addFields: {
      examsCount: { $size: "$examsCount" },
      doneExams: { $first: "$doneExams.count" }
    }
  }
])

操场

有很多方法得到这个结果,我刚刚解决了你的问题在你的方法。