基于Sport分组生成Games对象数组的Sequelize/MySQL查询需求
分组查询并封装字段为对象数组
Sequelize 查询语句
假设你的数据模型名为 Game,可以通过以下语句实现按 sport 分组,并将指定字段封装为 games 对象数组:
const result = await Game.findAll({ attributes: [ 'sport', [ sequelize.fn('JSON_ARRAYAGG', sequelize.fn('JSON_OBJECT', 'id', sequelize.col('id'), 'gender', sequelize.col('gender'), 'age_group', sequelize.col('age_group'), 'style', sequelize.col('style') ) ), 'games' ] ], group: ['sport'], raw: true });
JSON_OBJECT用于将单条记录的指定字段封装为一个对象JSON_ARRAYAGG用于将分组内的所有对象聚合为一个数组,并命名为gamesgroup: ['sport']指定按sport字段分组raw: true返回原始数据结构,避免Sequelize的模型实例包装
MySQL 原生查询语句
如果直接使用MySQL,替换 your_table_name 为实际表名即可:
SELECT sport, JSON_ARRAYAGG( JSON_OBJECT( 'id', id, 'gender', gender, 'age_group', age_group, 'style', style ) ) AS games FROM your_table_name GROUP BY sport;
- 逻辑与Sequelize一致,通过
JSON_OBJECT构造单条记录的对象,再用JSON_ARRAYAGG按sport分组聚合为数组
内容的提问来源于stack exchange,提问作者Inaara Kalani
相关产品推荐
相关产品推荐

