如何将三表关联分组求和的SQL查询转换为MongoDB查询语句
SQL转MongoDB查询方案
你需要用MongoDB的聚合管道(Aggregation Pipeline)实现多集合关联和分组统计,具体查询语句如下:
db.employee.aggregate([ // 关联assignment集合,匹配同empno的分配记录 { $lookup: { from: "assignment", localField: "empno", foreignField: "empno", as: "assignments" } }, // 过滤无分配任务的员工 { $match: { assignments: { $ne: [] } } }, // 拆分任务数组为单条记录,方便后续关联得分数据 { $unwind: "$assignments" }, // 关联finalreport集合,匹配同assid的得分记录 { $lookup: { from: "finalreport", localField: "assignments.assid", foreignField: "assid", as: "reports" } }, // 拆分得分报告数组为单条 { $unwind: "$reports" }, // 按员工编号分组,累加总得分 { $group: { _id: "$empno", totalPoints: { $sum: "$reports.points" } } }, // 调整输出字段和原SQL返回格式对齐 { $project: { _id: 0, empno: "$_id", totalPoints: 1 } } ])
逻辑对应说明
- 两次
$lookup操作分别对应SQL中e.empno = a.empno、a.assid = f.assid的表关联条件 - 首次
$match操作过滤掉无任务的员工,匹配你只统计已分配任务员工得分的需求 $group阶段的$sum累加逻辑完全对应SQL的sum(f.points)+group by e.empno的聚合规则
内容的提问来源于stack exchange,提问作者techshot nextgen
相关产品推荐
相关产品推荐

