Javascript Sequelize不能包含计数属性

Javascript Sequelize不能包含计数属性,javascript,sequelize.js,Javascript,Sequelize.js,伙计们。我有以下问题。我有两个实体,其中一个事件可以有许多参与者,如下所示: class Event { name: string; participants: Participant[]; } class Participant { eventId: string; event: Event; fullName: string; } 我想创建一个查询,它将计算参与者的数量。因此,我创建了如下查询: await Event.findAll({

伙计们。我有以下问题。我有两个实体,其中一个事件可以有许多参与者,如下所示:

class Event {
    name: string;
    participants: Participant[];
}

class Participant {
    eventId: string;
    event: Event;
    fullName: string;
}
我想创建一个查询,它将计算参与者的数量。因此,我创建了如下查询:

await Event.findAll({
      attributes: [
        "Event.id",
        "participants.id",
        [Sequelize.fn("COUNT", Sequelize.col("participants.id")), "participantCount"],
      ],
      include: [
        {
          model: Participant,
          as: "participants",
          required: false,
          attributes: ["id"],
        },
      ],
      raw: true,
      group: ["Event.id", "participants.id"],
    });
但问题是在执行过程中出现了如下错误:

"message": "attr[0].indexOf is not a function",
"stack": "TypeError: attr[0].indexOf is not a function\n    at attributes.map.attr 

我的sequelize版本是4.41.1。你有这种错误吗?如果是,我将非常感谢您的帮助。

因为您只需要计数,所以可以使用两种方法-续集查询原始查询

继续查询

    Event.findAll({
      attributes: [
       "id",
       [Sequelize.literal('SELECT COUNT(*) FROM participants P WHERE 
        P.eventId=events.id'), "participantCount"]
      ]
    });
    Db.sequelize.query(`
        SELECT E.id,
        (SELECT COUNT(*) FROM participants P WHERE P.eventId=E.id) as participantCount
        FROM events E
    `, { 
         type: Sequelize.QueryTypes.SELECT,
    });
原始查询

    Event.findAll({
      attributes: [
       "id",
       [Sequelize.literal('SELECT COUNT(*) FROM participants P WHERE 
        P.eventId=events.id'), "participantCount"]
      ]
    });
    Db.sequelize.query(`
        SELECT E.id,
        (SELECT COUNT(*) FROM participants P WHERE P.eventId=E.id) as participantCount
        FROM events E
    `, { 
         type: Sequelize.QueryTypes.SELECT,
    });

**Db这里是sequelize连接。

因为您只需要计数,所以可以使用两种方法—sequelize查询原始查询

继续查询

    Event.findAll({
      attributes: [
       "id",
       [Sequelize.literal('SELECT COUNT(*) FROM participants P WHERE 
        P.eventId=events.id'), "participantCount"]
      ]
    });
    Db.sequelize.query(`
        SELECT E.id,
        (SELECT COUNT(*) FROM participants P WHERE P.eventId=E.id) as participantCount
        FROM events E
    `, { 
         type: Sequelize.QueryTypes.SELECT,
    });
原始查询

    Event.findAll({
      attributes: [
       "id",
       [Sequelize.literal('SELECT COUNT(*) FROM participants P WHERE 
        P.eventId=events.id'), "participantCount"]
      ]
    });
    Db.sequelize.query(`
        SELECT E.id,
        (SELECT COUNT(*) FROM participants P WHERE P.eventId=E.id) as participantCount
        FROM events E
    `, { 
         type: Sequelize.QueryTypes.SELECT,
    });

**Db这里是sequelize连接。

您是否尝试删除sequelize.fn,然后运行以查看这是否是错误线路..?不确定这是否有帮助。。。但是,如果您想要每个事件的总计数,则需要除去对participants.id的所有引用,COUNT函数除外。从a)事件属性中删除。b) 参与者属性(应该是
attributes:[]
和c)组。@shiva2492没有这行,一切都正常。@KenOn10我试过了,我也有同样的错误。@AlojzyMucha你的代码看起来不错-我的工作应用程序有很多类似的代码。1) Sequelize是否在错误发生之前记录SQL?2) 您是否可以共享您的关联代码,可能是
Event.hasMany(Participant)
?您是否尝试删除Sequelize.fn,然后运行以查看这是否是错误行..?不确定这是否有帮助。。。但是,如果您想要每个事件的总计数,则需要除去对participants.id的所有引用,COUNT函数除外。从a)事件属性中删除。b) 参与者属性(应该是
attributes:[]
和c)组。@shiva2492没有这行,一切都正常。@KenOn10我试过了,我也有同样的错误。@AlojzyMucha你的代码看起来不错-我的工作应用程序有很多类似的代码。1) Sequelize是否在错误发生之前记录SQL?2) 您能否分享您的关联代码,可能是
事件。有许多(参与者)