MongoDB聚合查询如何获取总价格最高的电影类型单条结果
解决方案
你现有查询中第二个$group阶段完全冗余,第一个$group已经完成了按电影类型统计总价格的逻辑,第二个$group仅对字段做了重命名,没有产生新的聚合结果。
调整方案非常简单:删掉冗余的第二个$group,新增排序、取第一条的步骤即可,完整代码如下:
Movie.aggregate([ // 拆分多类型数组 { $unwind: '$genre' }, // 按类型分组统计总价格 { $group: { _id: "$genre", numOfMovies: {$sum: 1}, genrePrice: { $sum: '$price' } } }, // 按总价格降序排列,最高价格的类型排在首位 { $sort: { genrePrice: -1 } }, // 仅取排序后的第一条结果 { $limit: 1 }, // 可选:重命名字段匹配你预期的输出格式 { $project: { _id: 1, topPricedGenre: '$genrePrice' } } ])
如果希望更简洁,可以直接在第一个$group阶段就把总价格字段命名为topPricedGenre,省略最后的$project步骤:
Movie.aggregate([ { $unwind: '$genre' }, { $group: { _id: "$genre", numOfMovies: {$sum: 1}, topPricedGenre: { $sum: '$price' } } }, { $sort: { topPricedGenre: -1 } }, { $limit: 1 } ])
内容的提问来源于stack exchange,提问作者BossySmaxx
相关产品推荐
相关产品推荐

