You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将三表关联分组求和的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:09:05