В узле JS я получаю плоские данные из БД.Я хочу сгруппировать данные по основному объекту.
Пример данных, получаемых из БД (с использованием запроса левого соединения)
[
{
writer_id:1,
writer_name:'Ben'
book_id:1
book_name:'The special book'
},
{
writer_id:1,
writer_name:'Ben'
book_id:2
book_name:'My second book'
}
]
Мне нужно отформатировать данные следующим образом
[{
writer_id:1,
writer_name:'Ben'
books:
[{book_id:1
book_name:'The special book'
},{book_id:2
book_name:'My second book'
}]
}]
Как мне это сделать, используя javascript или knex-запросы (если это возможно)
мой код:
return db.from('arrangement')
.innerJoin('users as u1', 'arrangement.user_id', 'u1.id')
.....
.leftJoin('commercial_papers_status', 'commercial_papers.status_id', 'commercial_papers_status.id')
.select(['commercial_papers.*', ......)
.where({
'commercial_papers.user_id': user.id,
'commercial_papers.deleted':0
})
.then((arrangements) => {
*************************
TEST FOR GROUPING
************************
result = arrangements.reduce(function (r, obj) {
if(obj.id){
key ='key' + obj.id || '0';
r[key] = r[key] || [];
let {id, price, ...rest} = obj;
//console.log(rest); // { c: 30, d: 40 }
r[key].push(rest);
}
return r;
}, Object.create(null));
return result