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

MERN栈项目中如何使用Mongoose聚合统计MongoDB电影评分总和

解决方案

你需要使用MongoDB聚合管道的三个核心阶段即可实现需求,如果你不需要额外过滤数据,$match 操作符可以省略。

完整聚合代码示例

假设你的Mongoose模型名为 UserMovieVote,调用聚合的代码如下:

const getMovieRankingSummary = async () => {
  return await UserMovieVote.aggregate([
    // 可选:如果需要过滤特定条件的投票数据,在最前面加$match阶段
    // { $match: { /* 过滤条件,比如仅统计2024年之后的投票 */ } },
    
    // 拆分movies数组,将每个电影项转为独立的单条文档
    { $unwind: "$movies" },
    
    // 按电影维度分组,累加评分
    {
      $group: {
        // 推荐按电影_id分组避免重名电影统计错误,如果确定title唯一也可以用 "$movies.title"
        _id: "$movies._id",
        title: { $first: "$movies.title" },
        ranking: { $sum: "$movies.ranking" }
      }
    },
    
    // 调整输出字段,和你要求的返回格式对齐
    {
      $project: {
        _id: 0,
        title: 1,
        ranking: 1
      }
    }
  ])
}

阶段说明

  • $unwind:把每个用户文档中的movies数组拆平,数组中的每一个电影对象都会生成一条独立的文档,为后续分组求和做准备
  • $group:以电影的唯一标识为分组基准,用$sum累加所有分组内的电影评分,同时用$first提取当前分组对应的电影标题
  • $project:隐藏不需要返回的_id字段,输出你要求的title和ranking字段结构

如果你不需要避免重名问题,直接按title分组,将$group阶段修改为下方代码即可:

{
  $group: {
    _id: "$movies.title",
    ranking: { $sum: "$movies.ranking" }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 21:06:09