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

MongoDB如何在分层数据集自集合上聚合关联ID对应取值

MongoDB聚合实现SQL等效效果示例

以下以一个典型的分组统计场景为例,给出SQL逻辑对应的MongoDB聚合管道实现:

目标SQL示例

SELECT category, COUNT(*) AS product_count, AVG(price) AS avg_price
FROM products
WHERE price > 100
GROUP BY category
HAVING product_count >= 5
ORDER BY avg_price DESC

对应的MongoDB聚合操作

db.products.aggregate([
  // 对应SQL WHERE:过滤价格大于100的文档
  {
    $match: {
      price: { $gt: 100 }
    }
  },
  // 对应SQL GROUP BY+聚合函数:按category分组统计
  {
    $group: {
      _id: "$category",
      product_count: { $count: {} },
      avg_price: { $avg: "$price" }
    }
  },
  // 对应SQL HAVING:过滤分组后数量≥5的结果
  {
    $match: {
      product_count: { $gte: 5 }
    }
  },
  // 对应SQL ORDER BY:按平均价格降序排序
  {
    $sort: {
      avg_price: -1
    }
  },
  // 可选:对齐SQL输出字段名,将_id重命名为category
  {
    $project: {
      _id: 0,
      category: "$_id",
      product_count: 1,
      avg_price: 1
    }
  }
])

核心阶段说明

  • $match:负责过滤文档,对应SQL的WHERE(前置过滤)和HAVING(分组后过滤)
  • $group:实现分组聚合,_id指定分组键,$count/$avg等聚合函数对应SQL的统计逻辑
  • $sort:对结果集排序,-1表示降序,1表示升序
  • $project:调整输出字段的名称与显示规则,让结果和SQL输出对齐

如果你的目标SQL逻辑不同,可直接替换对应阶段的参数:

  • 多条件过滤:在$match中添加多个键值对
  • 多字段分组:将$group的_id设为对象,如_id: { category: "$category", brand: "$brand" }
  • 其他聚合计算:替换$group中的聚合函数(如$sum、$max、$min等)

内容的提问来源于stack exchange,提问作者Vinod R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:33:05