SQL右键连接到JSON /数组

我试图将来自MySql right join的行数组转换成nodeJS上的array/json格式。 考虑到通用的mysql表:

 emp_id name 1 john 2 bill 3 anna fk_emp_id project 1 p1 1 p2 1 p3 2 p1 2 p4 

而他们正确的join:

 id name fk_emp_id project 1 john 1 p1 1 john 1 p2 1 john 1 p3 2 bill 2 p1 2 bill 2 p4 3 anna 3 null 

这是:

 rows = [ {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p1"}, {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p2"}, {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p3"}, {"id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p1"}, {"id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p4"}, {"id":3, "name":"anna", "fk_emp_id" : "3" , "project" : null} ] 

我如何将它们转换为这个JSON:

 result = [ {id: '1', name: 'john', projects: [p1, p2, p3] } , {id: '2', name: 'bill', projects: [p1, p4] } , {id: '3', name: 'anna', projects: [] } ] 

如果你只看一个版本来将你的rows转换为result数组,那么你可以使用一个Map作为哈希表作为给定id的引用。

 var rows = [{ id: 1, name: "john", fk_emp_id: "1", project: "p1" }, { id: 1, name: "john", fk_emp_id: "1", project: "p2" }, { id: 1, name: "john", fk_emp_id: "1", project: "p3" }, { id: 2, name: "bill", fk_emp_id: "2", project: "p1" }, { id: 2, name: "bill", fk_emp_id: "2", project: "p4" }, { id: 3, name: "anna", fk_emp_id: "3", project: null }], result = []; rows.forEach(function (a) { var reference = this.get(a.id); if (!reference) { reference = { id: a.id, name: a.name, fk_emp_id: a.fk_emp_id, projects: [] }; this.set(a.id, reference); result.push(reference); } a.project && reference.projects.push(a.project); }, new Map); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; }