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

MongoDB聚合:按年份与流派去重统计不同title数量

解决MongoDB按年份、流派分组统计去重影片标题数量的问题

问题分析

你当前的聚合代码用$sum:1统计的是分组内的总文档数,但同一个影片标题对应多个演员文档,所以需要先对标题去重,再统计数量。

正确的聚合实现

方式一:两次分组去重统计

需要分两个阶段完成:

  1. 第一阶段:按year、genres和title分组,实现标题去重,每个唯一标题在对应年份和流派下只保留一条记录。
  2. 第二阶段:按year和genres分组,统计去重后的标题数量。

完整代码如下:

var stages = [
  // 第一步:按年份、流派、标题分组,完成标题去重
  {
    $group: {
      "_id": {
        "year": "$year",
        "genre": "$genres",
        "title": "$title"
      }
    }
  },
  // 第二步:按年份、流派分组,统计去重后的标题数量
  {
    $group: {
      "_id": {
        "year": "$_id.year",
        "genre": "$_id.genre"
      },
      "count": { $sum: 1 }
    }
  }
];

db.genres.aggregate(stages);

方式二:用$addToSet+$size简化实现

也可以用$addToSet将分组内的所有唯一标题存入数组,再用$size获取数组长度,一步完成统计:

var stages = [
  {
    $group: {
      "_id": {
        "year": "$year",
        "genre": "$genres"
      },
      "uniqueTitles": { $addToSet: "$title" }
    }
  },
  {
    $project: {
      "_id": 1,
      "count": { $size: "$uniqueTitles" }
    }
  }
];

db.genres.aggregate(stages);

结果说明

执行任意一种方式的代码后,都会得到你期望的输出:

{
  "_id": {
    "year": 2008,
    "genre": "Sports"
  },
  "count": 2
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:10:33