MongoDB聚合中$lookup结合$addFields的$regex匹配失效及学生数统计
MongoDB聚合:为每个群组统计学生数量
你只需要在现有聚合管道的末尾添加一个$addFields阶段,用$size操作符计算student数组的长度,就能得到每个群组的学生数量。修改后的完整聚合代码如下:
[ // 将群组_id转为字符串,匹配学生的mainGroups字段 {$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" } }, // 新增阶段:统计学生数量 {$addFields: { studentCount: {$size: "$student"} }} ]
补充说明
$size: "$student"会直接计算student数组的元素个数,也就是该群组对应的学生总数,结果会存入studentCount字段中。- 如果不需要保留完整的学生数组,只想保留统计数量,可以把最后一个阶段换成
$project,明确指定要保留的字段:{$project: { _id: 1, title: 1, studentCount: {$size: "$student"} }}
内容的提问来源于stack exchange,提问作者plibr
相关产品推荐
相关产品推荐

