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

如何用Mongoose Aggregate统计用户所有帖子的点赞总数

统计指定用户所有帖子的Likes总数量(Mongoose实现)

嘿,刚接触Mongoose的话,这种统计需求确实会有点懵,我给你两种实用的实现方案,你可以根据自己的场景选择:

方案一:用聚合管道(推荐,大数量场景更高效)

这种方法直接在数据库层面完成计算,不需要把所有帖子数据拉到后端再处理,数据量大的时候性能更好。

// 替换成你要统计的目标用户ID
const targetUserId = "5f5b784209393b0638f896e2";

// 假设你的帖子模型叫Post,记得换成你实际的模型名
Post.aggregate([
  // 第一步:筛选出该用户发布的所有帖子
  { $match: { author: targetUserId } },
  // 第二步:给每个帖子添加一个字段,存储该帖子的点赞数(likes数组的长度)
  { $addFields: { postLikeCount: { $size: "$likes" } } },
  // 第三步:把所有帖子的点赞数累加,得到总数量
  { $group: { _id: null, totalUserLikes: { $sum: "$postLikeCount" } } },
  // 第四步:只返回总点赞数字段,去掉默认的_id
  { $project: { _id: 0, totalUserLikes: 1 } }
])
.then(aggregateResult => {
  // 处理用户没有任何帖子的情况
  const totalLikes = aggregateResult.length > 0 ? aggregateResult[0].totalUserLikes : 0;
  console.log(`该用户所有帖子的总点赞数:${totalLikes}`);
})
.catch(error => {
  console.error("统计过程出错:", error);
});

方案二:先查询帖子再计算(直观易懂,适合小数据量)

如果你的帖子数量不多,这种方法更直观,新手更容易理解逻辑:

const targetUserId = "5f5b784209393b0638f896e2";

Post.find({ author: targetUserId })
.then(userPosts => {
  let totalLikes = 0;
  // 遍历所有帖子,累加每个帖子的点赞数
  userPosts.forEach(post => {
    totalLikes += post.likes.length;
  });
  console.log(`该用户所有帖子的总点赞数:${totalLikes}`);
})
.catch(error => {
  console.error("查询出错:", error);
});

小提示

  • 记得把代码里的Post替换成你自己定义的Mongoose帖子模型名称哦~
  • 如果你的用户ID是从User模型查询得到的,直接传入对应的_id值就可以了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:57:33