2017-10-18 260 views
0

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']}, 
] 

我该如何处理这个问题?

我想:

await db.name.findAll({ 
     where: {equalId: {$not: null}}, 
     attributes: [ 
     'equalId', 'name' 
     ], 
     order: ['name'], 
     group: ['equalId', 'name'], 
     raw: true, 
     logging: true 
    }); 

但结果是不正确的(

回答

1

您需要进行排序和分组的结果,他们已经从数据库中检索后

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); 
});