node.js - 我如何获得已完成多少次考试
问题描述
我有 3 个集合:类别、考试和结果。
对于每个类别,我都有一些考试。如果完成了一项考试,我会将其结果添加到“结果”集合中。
我参加了每个类别的所有考试。问题是我无法计算其中完成了多少。
这就是我现在得到的:
{ category: "Test", total_exams: 10 }
这就是我要的:
{ category: "Test", total_exams: 10, done_exam: 4 }
您可以在下面看到我到目前为止所做的事情:
解决方案
快速修复:
- 第二
$lookup
阶段,让过去examsCount._id
, - 在管道
$match
阶段匹配表达式内部,$exam_id with $$examId
- 将
user_id
匹配条件放在表达式之外 $count
文件总数count
- $addFields
to get
doneExams.countthis will return count in zero index, get it using
$firstor
$arrayElemAt`
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" }
}
}
])
有很多方法可以得到这个结果,我刚刚在你的方法中解决了你的问题。
推荐阅读
- python - 在谷歌合作者页面中打开的 kaggle 中打开 CSV 文件时出现问题
- django - 如何使用if条件在Django中查询外键并在满足条件时执行某些操作
- c++ - 我将如何准确地为输入的任何文本的长度加上下划线以及将每个字母大写
- math - 16 位整数的布隆过滤器概率
- file - “带有文件名但没有文件扩展名的路径”的正确术语是什么
- javascript - 异步函数后的函数
- python - AWS CDK python 捆绑包,在 requirements.txt 中具有依赖项
- python - 如何从 Discordpy 中的目录发送 GIF
- react-native - 我的基于 Expo 的 React Native 应用程序中未显示图标
- html - 换行到