2017-10-18 1 views
0

Postgresql-Datenbank. Tabelle:Knoten Fortsetzung Gruppe

Name | equalId 

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

Ich möchte ein Array von Objekten nach equalId sortiert bekommen. Beispiel:

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

Wie mache ich das mit Sequelize?

Ich habe versucht:

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

Aber das Ergebnis ist nicht korrekt (

Antwort

1

Sie müssen die Ergebnisse sortieren und gruppieren, nachdem sie aus der Datenbank abgerufen wurden

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