Postgresql数据库。表:
Name | equalId
name1 | 1
name2 | 2
name3 | 1
name4 | 2
name5 | 1
我想得到一个按equalId排序的对象数组。例如:
[
{equalId: 1, names: ['name1', 'name3', 'name5']},
{equalId: 2, names: ['name2', 'name4']},
]
我如何用sequelize做到这一点?
我试过了:
await db.name.findAll({
where: {equalId: {$not: null}},
attributes: [
'equalId', 'name'
],
order: ['name'],
group: ['equalId', 'name'],
raw: true,
logging: true
});
但结果不正确(
答案 0 :(得分:2)
在从数据库中检索结果后,您需要对结果进行排序和分组。
db.name.findAll({
where: {equalId: {$not: null}},
attributes: ['equalId', 'name'],
order: ['equalId'],
raw: true,
logging: true
})
.then((items) => {
// get an object keyed by equalId with a value of an array of names
const names = items.reduce((names, item) => {
if (!names[item.equalId]) {
names[item.equalId] = [item.name];
} else {
names[item.equalId].push(item.name);
}
return names;
}, {});
// get an array of results from the object
const result = Object.keys(names).map((equalId) => {
return {
equalId: equalId,
names: names[key],
};
})
// resolve the result array
return Promise.resolve(result);
});