Javascript 节点按多列排序

Javascript 节点按多列排序,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我来自Ruby/Rails背景,习惯了这种语法: Model.all.order('col1+col2+col3') 例如,假设col1、col2和col3是整数,它将根据这3列的总和对结果进行排序 使用sequelize是否有类似的排序方法?对于最新的主控形状(不确定更改是否已推送到npm),您可以执行以下操作: Model.findAll({ order: [[{ raw: 'col1 + col2 + col3 DESC' }]]}); 导致 ORDER BY col1 + col2 +

我来自Ruby/Rails背景,习惯了这种语法:

Model.all.order('col1+col2+col3')

例如,假设col1、col2和col3是整数,它将根据这3列的总和对结果进行排序

使用sequelize是否有类似的排序方法?

对于最新的主控形状(不确定更改是否已推送到npm),您可以执行以下操作:

Model.findAll({ order: [[{ raw: 'col1 + col2 + col3 DESC' }]]});
导致

ORDER BY col1 + col2 + col3 DESC
ORDER BY SUM(`col1`, `col2`, `col3`) DESC
或者你可以:

Model.findAll({ order: [[sequelize.fn('SUM', sequelize.col('col1'), sequelize.col('col2'), sequelize.col('col3')), 'DESC']]});
导致

ORDER BY col1 + col2 + col3 DESC
ORDER BY SUM(`col1`, `col2`, `col3`) DESC
我建议使用第二个版本,它将正确地转义列名。有关更多信息,请参阅


必须在我的模型的defaultScope中按col1+col2进行排序,作为答案提供的求和解决方案返回了一个sequelize错误
函数求和(数值,数值)不存在
(或类似内容)

我当前的解决方法:

order: [[ 'col1', sequelize.literal('+'), 'col2', 'DESC']]
哪个会打印出来

ORDER BY "tableName"."col1"+"col2" DESC
只需添加更多的跨空间列和
sequelize.literal(“+”)
以获得更多列

如果使用includes/joins,并且需要使用表名调用所有列。。。我尝试了
sequelize.col('col2')
,但没有添加表名。我想像
'tableName',sequelize.literal('.'),'columnName'
这样的组合应该可以工作,但是您需要知道您的tableName/别名。我无法访问我的模型,因为它是在我的用例中定义的。文档中的
{model:'model',as:'alias'}
也失败了