我有3个集合,类别,考试和结果。
对于每一个类别,我都有一些考试。如果完成了一个检查,我将它们的结果添加到“result”集合中。
我参加了每个类别所有考试。问题是我数不清有多少是做的。
这是我现在得到的:
{ category: "Test", total_exams: 10 }
这就是我想要的:
{ category: "Test", total_exams: 10, done_exam: 4 }
下面你可以看到我到现在都做了些什么:
https://mongoplayground.net/P/upsapkye4dr
快速修复:
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" }
}
}
])
操场
有很多方法得到这个结果,我刚刚解决了你的问题在你的方法。