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

MongoDB如何统计用户movies_watched数组内各movie_genres元素的出现次数

MongoDB 流派统计实现方案

直接使用MongoDB聚合框架即可完成实时统计,天然适配movies_watched数组动态新增数据的场景,每次查询都会基于最新的观影记录计算,无需额外维护冗余统计字段。

具体聚合查询语句

// 替换为你要查询的用户筛选条件,这里以邮箱为例
db.users.aggregate([
  // 第一步:匹配目标用户文档
  {
    $match: {
      email: "rambo@hotmail.com"
    }
  },
  // 第二步:展开movies_watched数组,拆分出每一条观影记录
  {
    $unwind: "$movies_watched"
  },
  // 第三步:展开单条观影记录的流派数组,拆分出每个单独的流派ID
  {
    $unwind: "$movies_watched.movie_genres"
  },
  // 第四步:按流派ID分组,统计每个ID的出现次数
  {
    $group: {
      _id: "$movies_watched.movie_genres",
      count: { $sum: 1 }
    }
  },
  // 可选:调整输出字段名,更符合阅读习惯
  {
    $project: {
      genre_id: "$_id",
      count: 1,
      _id: 0
    }
  }
])

输出结果说明

针对你提供的示例数据,执行上述查询后得到的结果如下:

[
  { "genre_id": 28, "count": 2 },
  { "genre_id": 53, "count": 2 },
  { "genre_id": 18, "count": 1 }
]

完全符合你预期的统计结果。

性能优化建议

如果用户的观影记录量级非常大,聚合查询性能不足的话,可以选择在新增观影记录时同步更新统计字段:每次插入新的观影记录时,遍历对应movie_genres数组,用$inc原子操作给对应流派的计数加1,后续直接读取统计字段即可,性能会比实时聚合更高,但需要保证写入逻辑的一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:24:04