2017-10-18 7 views
0

Base de données Postgresql. Tableau:Groupe sequelize de noeud

Name | equalId 

name1 | 1 
name2 | 2 
name3 | 1 
name4 | 2 
name5 | 1 

Je souhaite obtenir un tableau d'objets triés par equalId. Exemple:

[ 
{equalId: 1, names: ['name1', 'name3', 'name5']}, 
{equalId: 2, names: ['name2', 'name4']}, 
] 

Comment faire cela avec sequelize?

J'ai essayé:

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

Mais le résultat est correct (

Répondre

1

Vous aurez besoin de trier et regrouper les résultats après avoir été extraites de la base de données

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