2015-08-30 23 views
0

我想通過函數過濾結果,然後還要使用函數列對結果集進行排序。這是我到目前爲止的代碼:如何使用sequelize.js中的函數進行過濾

db.trip.findAll({ 
    attributes: [ 
    [ 
     db.sequelize.fn('SUM', 
     db.sequelize.col('departure_time'), 
     db.sequelize.col('arrival_time')), 
     'summation' 
    ] 
    ], 
    where: { 
    summation: { 
     gte: 500 
    } 
    }, 
    order: [['summation', 'ASC']], 
    logging: console.log 
}).then(function(results) { 

}); 

獲取生成的SQL使得它很難再引用,得到的屬性創建別名:

SELECT SUM("departure_time", "arrival_time") AS "summation" 
FROM "trip" AS "trip" 
WHERE "trip"."summation" >= 500 
ORDER BY "trip"."summation" ASC; 

如何使這項工作任何想法沒有使整個查詢文字?

回答

1

我發現一種方法是將字面語句作爲別名。我使用Postgres的,所以我不知道如果在其他方言的引用作品:

var summationAlias = db.sequelize.literal('"summation"'); 

db.trip.findAll({ 
    attributes: [ 
    [ 
     db.sequelize.fn('SUM', 
     db.sequelize.col('departure_time'), 
     db.sequelize.col('arrival_time')), 
     'summation' 
    ] 
    ], 
    where: db.sequelize.where(summationAlias, '>=', 500), 
    order: [[summationAlias, 'ASC']], 
    logging: console.log 
}).then(function(results) { 

}); 

上面的代碼生成的SQL語句:

SELECT SUM("departure_time", "arrival_time") AS "summation" 
FROM "trip" AS "trip" 
WHERE "summation" >= 500 
ORDER BY "summation" ASC; 
相關問題