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

MongoDB双集合分组查询:查找编辑推荐数=1最多的平台

解决MongoDB聚合查询:找出拥有最多count_editor_choice=1记录的平台

没问题,我来帮你搞定这个查询!咱们的核心需求是从fact集合里筛选出count_editor_choice=1的记录,关联game_dimension拿到对应的平台信息,最后统计哪个平台的这类记录最多。

完整聚合查询代码

db.fact.aggregate([
  // 第一步:筛选出符合条件的fact记录
  {
    $match: {
      count_editor_choice: 1
    }
  },
  // 第二步:关联game_dimension集合,获取平台信息
  {
    $lookup: {
      from: "game_dimension",
      localField: "game_id",
      foreignField: "game_id",
      as: "game_info"
    }
  },
  // 第三步:展开关联得到的数组(因为lookup返回的是数组类型)
  {
    $unwind: "$game_info"
  },
  // 第四步:按平台分组,统计每组的记录数
  {
    $group: {
      _id: "$game_info.platform",
      editor_choice_count: { $sum: 1 }
    }
  },
  // 第五步:按统计数量降序排序,最多的排在最前面
  {
    $sort: { editor_choice_count: -1 }
  },
  // 第六步:只取排名第一的结果
  {
    $limit: 1
  }
])

每个管道阶段的作用解释

  • $match:先过滤掉count_editor_choice不等于1的记录,减少后续聚合处理的数据量,提升查询效率。
  • $lookup:相当于SQL里的左连接,通过game_id字段把fact和game_dimension关联起来,把匹配到的游戏信息放到game_info数组里。
  • $unwind:因为$lookup返回的是数组,哪怕只有一条匹配数据也是数组形式,所以用这个操作把数组展开成单个文档,方便后续按平台分组。
  • $group:以平台名称为分组键,用$sum:1统计每个平台下符合条件的记录总数。
  • $sort:按统计出来的数量从大到小排序,这样数量最多的平台会排在结果集的第一位。
  • $limit:只保留排序后的第一条数据,也就是我们要找的拥有最多count_editor_choice=1记录的平台。

补充说明

如果存在多个平台的统计数量相同且都是最大值的情况,上面的$limit只会返回其中一个。如果需要把所有并列第一的平台都返回,可以把$limit替换成以下两个阶段:

{
  $group: {
    _id: "$editor_choice_count",
    platforms: { $push: "$_id" }
  }
},
{
  $sort: { _id: -1 }
},
{
  $limit: 1
}

这样会返回所有拥有最高记录数的平台列表。

内容的提问来源于stack exchange,提问作者Nidhi Agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:20:04