Sequelize 获取关联模型的计数

Sequelize Get counts of associated model

我有角色模型,父模型有成员模型,子模型有成员角色

Role.belongsToMany(models.Member, {foreignKey: 'roleId', 通过: models.MemberRole}); Role.hasMany(models.Member角色, {foreignKey: 'roleId', as: 'roleMembers'});

目前,无论会员状态如何,它都在计数。如果 Member 具有 Active 状态,我想获取 memberRoles 的计数

subQuery: false,
    where: {accountId: accountId},
    attributes: {
        include: [
            [Sequelize.literal('COUNT(DISTINCT("roleMembers"."id"))'), 'assignedMemberCount'],
            [Sequelize.literal('COUNT(DISTINCT("roleGroups"."id"))'), 'assignedGroupCount'],
        ]
    },
    include: [{
        model: MemberRole,
        as: 'roleMembers',
        attributes: [],
       
       required: false
    },
    order: [['name', 'ASC']],
    group: ['Role.id'],
    limit: options.limitCount,
    offset: options.skipCount

最正确的方法是使用子查询,尤其是当您对主模型使用 limitoffset 时:

subQuery: false,
where: {accountId: accountId},
attributes: {
  include: [
    [Sequelize.literal('SELECT COUNT("roleMembers"."id") FROM roleMembers where roleMembers.roleId=roles.id'), 'assignedMemberCount'],
    ]
},
order: [['name', 'ASC']],
limit: options.limitCount,
offset: options.skipCount

我没有指出 assignedGroupCount,因为我没有看到 include roleGroups。您可以使用 assignedMemberCount 子查询作为示例添加它。