Sequelize报错:Unknown column 'book_likes.bookId' in 'field list'求助
问题解决方法
错误原因
- 字段引用路径错误:
book_likes.bookId的写法没正确关联到嵌套的BookLikes模型,Sequelize无法识别该字段的归属位置。 - 缺少聚合查询必需的GROUP BY:使用
count()聚合函数时,必须指定分组字段,否则SQL执行会触发逻辑错误。
修改后的代码
const result = await Tags.findOne({ subQuery: false, where: { name }, attributes: ['name'], include: [ { model: Book, attributes: [ 'id', // 必须加入主键用于GROUP BY分组 'title', 'image', [Sequelize.fn('count', Sequelize.col('Books.bookLikes.bookId')), 'likes'] ], include: [ { model: BookLikes, attributes: [], // 如果模型关联时设置了自定义别名,这里要对应填写,比如as: 'bookLikes' } ] } ], order: [ [Book, 'createdAt', 'DESC'] ], group: ['Tags.name', 'Book.id', 'Book.title', 'Book.image'] // 分组字段需包含所有非聚合的查询字段 });
关键修改点
- 修正字段引用:把
book_likes.bookId改为Books.bookLikes.bookId,让Sequelize能正确识别嵌套关联的字段(如果你的BookLikes关联用了自定义别名,比如as: 'likes',则替换为Books.likes.bookId)。 - 添加GROUP BY配置:在查询选项中加入
group,包含Tags的查询字段和Book的所有非聚合字段(主键、title、image),确保聚合函数能按单本书分组统计点赞数。 - Book模型属性必须包含主键:分组逻辑依赖Book的主键,所以必须在Book的
attributes中加入主键字段(比如id,如果你的主键名不同则替换为实际名称)。
内容的提问来源于stack exchange,提问作者user13762985
相关产品推荐
相关产品推荐

