如何解决我如何计算每个类别的考试
我有 3 个集合。一种用于类别,一种用于考试,一种用于结果。 类别如下:
{
_id: 3276438964823,name: 'Category 1',companyId: 12345
}
试卷如下:
{
_id: 482348327,categoryId: 3276438964823,name: "Computer",companyId: 12345
}
结果集合如下:
{
_id: 482348327,exam_id: 482348327
}
我想要的结果是这样的:
[
{category: 'Categori 1',exam_count: 1,exam_done: 0},{category: 'Categori 2',exam_count: 8,exam_done: 5},.....
]
现在我已经尝试过这个代码:
Exams.aggregate([
{
$match: {
companyId: { $in:
[mongoose.Types.ObjectId(req.userData.companyId)] },},{
$lookup: {
from: "categories",let: {
companyid: "$companyId",pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: ["$companyId","$$companyid"],{
$eq: ["$type",1],],{
$project: {
_id: 1,name: 1,}
}
],as: "categories",])
我现在得到的是这个:
[
{
"_id": "5ee366cb3fd50f3d388493ac","active": 1,"categoryId": "5eb640414ac4b84d944a3639","name": "Test 2","insertDate": "2020-06-12T11:28:11.966Z","__v": 0,"companyId": "5f621c2461090c2f40a014d3","categories": [
{
"_id": "5f621d3e61090c2f40a014d9","name": "A1,A2,B1,B"
},{
"_id": "5f621d4b61090c2f40a014db","name": "C1,C"
}
]
},{
"_id": "5f5d2eea4387a83088e6f802","categoryId": "5f5cf44710cd434344b36a91","insertDate": "2020-09-12T20:26:18.294Z",]
但这不是我想要的。我想统计我的类别集合中所有类别的所有考试
解决方法
您正在从考试集合中查询并使用类别查找,但它应该从类别和查找中使用考试,
-
$lookup
与exams
集合 -
$lookup
与results
集合 -
$addFeilds
使用$size
获取考试总数和总成绩
Categories.aggregate([
{
$lookup: {
from: "exams",localField: "_id",foreignField: "categoryId",as: "examsCount"
}
},{
$lookup: {
from: "results",localField: "examsCount._id",foreignField: "exam_id",as: "doneExams"
}
},{
$addFields: {
examsCount: { $size: "$examsCount" },doneExams: { $size: "$doneExams" }
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。