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

Sequelize查询帖子评论并统计每条点赞数 解决单条返回及死循环问题

问题根因

1. 仅返回单条评论的原因

你使用的COUNT是SQL聚合函数,未显式配置GROUP BY分组规则时,数据库会把所有匹配的评论行合并为1行,返回全局点赞数统计结果,而非按每条评论单独统计,因此只会得到1条记录。

2. 无限请求的原因

未配置GROUP BY时,即使没有匹配的子评论,带COUNT的查询也会返回1行统计结果(除likesCount为0外,其余字段均为NULL),导致children.length永远为1,递归终止条件if (children.length)永远成立,后续查询的parentId为NULL,进入无限递归循环。

解决方案

在查询配置settings中添加GROUP BY规则,按评论主键和关联的用户主键分组,保证每条评论单独统计点赞数,修改后的配置如下:

async getReviews(entityId) {
        let settings = {
            include: [{
                model: db.User,
                attributes: ['nickname', 'img', 'role'],
            }, {
                attributes: [],
                model: db.Like
            }],
            attributes: {
                include: [[db.Sequelize.fn("COUNT", db.Sequelize.col("likes.id")), "likesCount"]]
            },
            // 新增分组规则,按评论ID、关联用户ID分组,确保每条评论独立统计点赞数
            group: ['review.id', 'user.id'],
            raw: true,
            nest: true
        }
        
        const reviews = await db.Review.findAll({
            where: {
                parentId: entityId,
                type: 'review',
                isDeleted: false
            },
            ...settings
        });
        
        await db.Review.includeNested(reviews, settings);
        
        return reviews;
    }

如果你的数据库开启了严格SQL模式,需将SELECT中所有非聚合字段都加入GROUP BY列表,即补充review表的所有查询字段。
修改后分组逻辑会让无匹配子评论的查询返回空数组,递归会正常终止,同时每条评论都会返回独立的点赞统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:00