2015-11-10 5 views
0

Я использую Sequelize ORM для Node.js. Мне нужно получить строки с уникальными значениями в определенном столбце. Пример таблица:Уникальные значения в Sequelize

id | name | group 
----------------- 
1 | One | 2 
2 | Two | 1 
3 | Three| 2 
4 | Four | 3 
5 | Five | 1 

запрос для столбца group и результата:

id | name | group 
----------------- 
1 | One | 2 
2 | Two | 1 
4 | Four | 3 

Линия один, два и четыре была первой, кто имел уникальное group значения. Как сделать это в Sequelize?

ответ

2

Sequelize сырье запроса является одним из способов получения из строк, которые вы хотите:

/* 
    var sql = 
    SELECT r.id, 
     r.name, 
     r.groupnum 
    FROM s04.row r 
    JOIN 
     (SELECT min(id) AS id, 
       groupnum 
     FROM s04.row 
     GROUP BY groupnum) s 
    ON r.id = s.id 
*/ 
return sq.query(sql, { type: sq.QueryTypes.SELECT}); 

Полученное обещание будет разрешаться в массив JSON:

[ 
    { 
    "id": 1, 
    "name": "One", 
    "groupnum": 2 
    } 
    ... 
] 

Если вы после этого нужно работать с этими строками как экземпляры можно назвать build по каждому элементу массива:

Model.build({ /* attributes-hash */ }, { isNewRecord: false }) 

См. Пример here. Если я найду способ сделать это через вызовы функций Sequelize (aggregate, find* и т. Д.), Которые не слишком отвратительны, я также отправлю это здесь как отдельный ответ.

Смежные вопросы