MongoDB聚合查询异常:无法统计电影最多上映年份
解决MongoDB嵌套数组电影数据的年份统计问题
你的问题出在所有电影数据都嵌套在docs数组中,而原始聚合查询直接在顶层文档上分组,顶层文档并没有year字段,所以返回了_id: null且计数为1(因为只有1个顶层文档)。
正确的查询需要先将docs数组拆分为单个文档,再进行分组统计:
db.movies.aggregate([ // 拆分数组,将每个电影对象转为独立文档 { "$unwind": "$docs" }, // 按电影的year字段分组,统计每年的电影数量 { "$group": { "_id": "$docs.year", "moviecount": { "$sum": 1 } } }, // 按电影数量降序排序(最多的在前) { "$sort": { "moviecount": -1 } }, // 只取第一条结果(数量最多的年份) { "$limit": 1 } ])
各阶段说明:
$unwind: 将docs数组中的每个元素展开为单独的文档,这样每个电影都成为一个独立的处理单元。$group: 以每个电影的year字段为分组依据,累加统计每年的电影数量。$sort: 按统计出的moviecount降序排列,确保数量最多的年份排在第一位。$limit: 只返回排序后的第一条结果,即电影数量最多的年份。
内容的提问来源于stack exchange,提问作者Jose_Peeterson
相关产品推荐
相关产品推荐

