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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:33:32