如何处理数据库JOIN查询返回结果,将相同标识的对象分组为嵌套数组
实现方案
你可以在拿到数据库查询结果后,通过临时映射表按双字段标识分组,具体代码如下:
pool.query('SELECT * FROM columnslist INNER JOIN tableslist ON columnKey = keyTable', (error, result) => { if (error) { // 可自行添加错误处理逻辑 return response.status(500).send(error); } // 临时分组映射表 const groupMap = {}; result.forEach(item => { // 用keyTable和columnKey拼接作为唯一分组标识 const groupKey = `${item.keyTable}-${item.columnKey}`; // 分组不存在则初始化 if (!groupMap[groupKey]) { groupMap[groupKey] = []; } groupMap[groupKey].push(item); }); // 提取所有分组得到最终嵌套数组 const nestedResult = Object.values(groupMap); response.send(nestedResult); });
输出效果说明
用你提供的示例数据运行后,返回的nestedResult结构如下,完全符合需求:
[ [ { "id": 1, "columnOne": "qeqeqq qq wq qw wwqqwdqd", "columnTwo": "qdqdqdq wdqdqwqwd", "columnThree": "dqwdq qw qqsvds", "columnFour": "svsdvsxcvscsv svd ds", "columnFive": "sdvsdvsdvs ds sdd", "columnKey": 1, "keyTable": 1, "name": "Test" } ], [ { "id": 3, "columnOne": "qdqwdwq", "columnTwo": "dqdqd", "columnThree": "qdqdwq", "columnFour": "wdqwdqwq", "columnFive": "wdqdqw", "columnKey": 2, "keyTable": 2, "name": "Qqeqeqeq" }, { "id": 4, "columnOne": "qdqwdwq", "columnTwo": "dqdqd", "columnThree": "qdqdwq", "columnFour": "wdqwdqwq", "columnFive": "wdqdqw", "columnKey": 2, "keyTable": 2, "name": "Qqeqeqeq" } ] ]
如果后续需要调整分组标识,只需要修改groupKey的拼接规则即可。
内容的提问来源于stack exchange,提问作者aleksf
相关产品推荐
相关产品推荐

