如何使用mysql npm包从MySQL/MariaDB查询返回嵌套对象数组到Node.js服务端
实现方案
MariaDB本身不会直接返回JavaScript格式的嵌套对象数组,但可以通过内置JSON函数一次查询生成完全符合你要求格式的JSON字符串,拿到结果后仅需一次JSON解析即可得到目标结构,无需额外做分组逻辑处理。
具体SQL语句
SELECT JSON_ARRAYAGG(friend_group) AS nested_result FROM ( -- 内层按personName分组,生成每个person对应的好友对象数组 SELECT JSON_ARRAYAGG( JSON_OBJECT( 'personName', p.Name, 'friendName', f.friendName, 'Address', p.Address, 'Birthday', f.Birthday ) ) AS friend_group FROM Person p INNER JOIN Friends f ON p.Name = f.personName GROUP BY p.Name ) AS group_temp;
使用说明
- 执行上述查询后,返回结果的第一行
nested_result字段就是和你要求格式完全一致的JSON字符串,在Node.js中仅需调用JSON.parse(result[0].nested_result)就能直接得到目标嵌套数组 - 注意两个表都存在
Birthday字段,上述SQL默认取Friends表存储的好友生日,如果你需要取person的生日,把f.Birthday替换为p.Birthday即可 - 该方案要求MariaDB版本 >= 10.2,低于该版本无法使用JSON聚合函数
内容的提问来源于stack exchange,提问作者tal gumay
相关产品推荐
相关产品推荐

