如何在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
相关产品推荐
相关产品推荐

