我有groups
和students
集合。
Groups: {_id : ObjectId, title: String}
Students{mainGroups: String}
mainGroups
是一个连接的字符串,对于所有的groups
,每个学生都在学校学习过。
我的代码是给我的,所有groups
的所有students
集合。
我想将groups
集合与students
聚合,并将students
集合作为单个数组获取,对于每个groups
,无论返回多少个students
。
[
//mainGroups is String that`s why I convert Group`s $_id to String here
{$addFields: {
gid: {$toString:"$_id"}
}},
{$project: {
_id: 1,
gid: 1,
title:1
}},
{
$lookup: {
"from": 'students',
"let": {"groupId": "$gid"},
pipeline: [
{"$match":
{"$expr" :
{"mainGroups":{"$regex": "$$groupId", "$options" :"i"}}
}
}
],
as: "student"
}
},
]
我怎样才能得到groups
的students
的数量?
1条答案
按热度按时间kxeu7u2r1#
修改代码如下:
让我解释一下我们所做的改变以及原因:
$lookup
阶段,我们没有在$match
表达式中使用$regex运算符,而是选择了$regexMatch
运算符。这个变化允许我们在字符串中搜索特定的模式。$$groupId
变量的$concat。$project
阶段,我们使用$size
运算符来确定students数组中的学生数量,该数组是在$lookup
阶段填充的。因此,最终输出中的每个组文档都将包括一个名为studentCount的新字段,该字段表示与该组关联的学生总数,由mainGroups字段确定。