如何用Sequelize实现帖子关联点赞数的统计查询?
帖子与点赞数量的关联查询(Sequelize ORM)
模型关联配置
先确保模型间的关联关系正确配置:
- 在Posts模型中定义与PostsLikes的一对多关联:
Posts.hasMany(PostsLikes, { foreignKey: 'postID', as: 'likes' });
- 在PostsLikes模型中定义与Posts的多对一关联:
PostsLikes.belongsTo(Posts, { foreignKey: 'postID', as: 'post' });
查询实现
根据单帖ID查询
通过findByPk结合聚合函数统计点赞数,同时获取帖子详情:
const postWithLikeCount = await Posts.findByPk(targetPostId, { attributes: { include: [[sequelize.fn('COUNT', sequelize.col('likes.id')), 'likeCount']] }, include: [ { model: PostsLikes, as: 'likes', attributes: [] // 无需返回中间表字段,仅用于统计 } ], group: ['Posts.id'] });
查询所有帖子及对应点赞数
使用findAll实现批量查询:
const postsWithLikeCounts = await Posts.findAll({ attributes: { include: [[sequelize.fn('COUNT', sequelize.col('likes.id')), 'likeCount']] }, include: [ { model: PostsLikes, as: 'likes', attributes: [] } ], group: ['Posts.id'] });
注意事项
- 确保代码中已引入Sequelize实例(即定义模型时使用的
sequelize对象) - 若PostsLikes模型中点赞记录的主键不是
id,需将likes.id替换为对应字段名 - 上述查询为内连接,会自动排除无点赞记录的帖子;若需保留这类帖子(点赞数显示为0),可在
include对象中添加required: false(转为左连接)
内容的提问来源于stack exchange,提问作者Ahmed Tawil
相关产品推荐
相关产品推荐

