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

如何在Postgres数据库的Sequelize中统计关联帖子的总点赞数量

实现方案

首先确认模型关联已正确配置,在post模型中添加和user_like的一对多关联:

// post模型定义处新增关联
Post.hasMany(UserLike, {
  foreignKey: 'post_id',
  as: 'likes'
})

修改你的查询代码,通过sequelize.literal统计关联的点赞记录总数即可:

// 不需要事务可以直接去掉外层的transaction逻辑,这里保留原有写法做兼容调整
sequelize.transaction().then(t => {
  return Category.findOne({
    where: { id: request.params.id },
    attributes: ["id", "category_name"],
    include: [{
      model: Post,
      as: "posts",
      through: { attributes: [] },
      attributes: [
        "id",
        "title",
        "image_url",
        // 子查询统计对应帖子的点赞总数
        [sequelize.literal('(SELECT COUNT(*) FROM user_like WHERE user_like.post_id = posts.id)'), 'total_likes']
      ]
    }],
    group: ['Category.id', 'posts.id']
  }, { transaction: t });
}).then(categoryData => {
  const res = { 
    data: categoryData, 
    success: true 
  }
  response.status(200).json(res)
}).catch(err => {
  console.log(err)
  response.status(500).json({ success: false, msg: '查询失败' })
});

说明

  • 如果你的模型定义时用的是小写的post、category,对应调整代码里的模型名即可
  • 子查询统计点赞数性能优于联表统计,也不需要额外配置虚拟字段,返回的total_likes会自动映射到每个post对象的属性中,完全匹配你需要的返回格式
  • 不需要事务的话可以直接删除外层的transaction逻辑,直接执行findOne查询即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:48:03