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

如何对两个集合执行Aggregate操作获取各用户名下最高帖子浏览量

实现方案

你可以直接通过数据库层的聚合计算完成需求,完全不需要在应用层循环查询,能避免N+1查询带来的性能损耗,以下是对应不同数据库的实现方式:

MongoDB 场景

你给出的集合结构符合MongoDB文档模型特征,可直接使用聚合管道实现:

db.Messages.aggregate([
  // 第一步:按作者分组,统计每个作者名下的最高浏览量
  {
    $group: {
      _id: "$author",
      highest_view: { $max: "$views" }
    }
  },
  // 第二步:关联Users集合,匹配对应用户信息
  {
    $lookup: {
      from: "Users",
      localField: "_id",
      foreignField: "username",
      as: "user"
    }
  },
  // 第三步:展开lookup返回的用户数组
  { $unwind: "$user" },
  // 第四步:格式化输出字段,匹配你需要的返回结构
  {
    $project: {
      _id: 0,
      username: "$_id",
      highest_view: 1
    }
  }
])

如果需要保留Users集合中的其他字段,只需要在$project配置中补充对应字段即可,比如要保留用户的注册时间字段可以加register_time: "$user.register_time"。
优化建议:可以给Messages集合的author和views字段建立联合索引,进一步提升分组统计的执行效率。

关系型数据库(MySQL等)场景

如果是关系型数据库,可通过分组+联表查询实现:

SELECT u.username, MAX(m.views) AS highest_view
FROM Users u
LEFT JOIN Messages m ON u.username = m.author
GROUP BY u.username

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:05