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

MongoDB是否支持嵌套查询?求等价SQL的聚合实现方案

将SQL查询转换为MongoDB聚合管道

针对你要实现的EFFORTS = 特定处理者的高优先级Infodocs总数 / 该处理者的Infodocs总数 * 100并取整的需求,不需要拆分两个子查询,通过一次聚合管道就能完成计算。以下是完整的实现代码:

db.INFODOCS.aggregate([
  // 筛选出指定处理者的所有文档
  { $match: { PROCESSOR_ID: "userid" } },
  // 分组统计总数和高优先级文档数
  {
    $group: {
      _id: null, // 无需按字段分组,仅统计全局结果
      totalCount: { $sum: 1 }, // 统计该处理者的总文档数
      highPriorityCount: {
        $sum: {
          $cond: { if: { $eq: ["$ML_PRIORITY", "HIGH"] }, then: 1, else: 0 }
        }
      }
    }
  },
  // 计算EFFORTS并处理除数为0的异常情况
  {
    $project: {
      _id: 0, // 隐藏默认的_id字段
      EFFORTS: {
        $round: {
          $cond: {
            if: { $eq: ["$totalCount", 0] },
            then: 0, // 无文档时返回0,避免除以0错误
            else: { $multiply: [{ $divide: ["$highPriorityCount", "$totalCount"] }, 100] }
          }
        }
      }
    }
  }
])

各阶段说明:

  • $match阶段:先把计算范围缩小到指定PROCESSOR_ID的文档,减少后续计算的数据量,对应SQL中两个子查询的PROCESSOR_ID = userid条件。
  • $group阶段:
    • totalCount: { $sum: 1 }:统计该处理者的总文档数,对应SQL第二个子查询的COUNT(*)。
    • highPriorityCount:用$cond判断每个文档的ML_PRIORITY是否为HIGH,符合条件则累加1,否则累加0,最终得到高优先级文档总数,对应SQL第一个子查询的COUNT(*)。
  • $project阶段:
    • 用$divide计算占比,乘以100后通过$round取整,得到最终的EFFORTS。
    • 加入$cond判断totalCount是否为0,避免出现除以0的运行错误。

批量计算所有处理者的EFFORTS

如果需要一次性统计所有处理者的占比,只需要修改$group的_id为"$PROCESSOR_ID"即可:

db.INFODOCS.aggregate([
  {
    $group: {
      _id: "$PROCESSOR_ID", // 按处理者分组统计
      totalCount: { $sum: 1 },
      highPriorityCount: {
        $sum: { $cond: { if: { $eq: ["$ML_PRIORITY", "HIGH"] }, then: 1, else: 0 } }
      }
    }
  },
  {
    $project: {
      EFFORTS: {
        $round: {
          $cond: {
            if: { $eq: ["$totalCount", 0] },
            then: 0,
            else: { $multiply: [{ $divide: ["$highPriorityCount", "$totalCount"] }, 100] }
          }
        }
      }
    }
  }
])

内容的提问来源于stack exchange,提问作者ankit lohiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:30:53