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) 您能否分享您的关联代码,可能是事件。有许多(参与者)
?