Sequelize mssql:按主键和限制排序

时间:2017-08-24 18:30:33

标签: sql-server sequelize.js

我想使用主键运行带有结果排序的查询,并且还限制返回结果的数量。例如:

return Things.findAll({ attributes: [ 'id', 'status', 'otherField' ], limit: 2, order: [['id', 'DESC']] })

构建查询时,它会生成以下SQL语句:

... ORDER BY [Source].[id] DESC, [id] OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY

由于id是主键而sort参数也是id,因此出现以下错误:

'A column has been specified more than once in the order by list. Columns in the order by list must be unique.'

我使用sequelize 3.30.4,连接到Microsoft SQL Server 2017的繁琐2.0.0。

谢谢。

2 个答案:

答案 0 :(得分:0)

订单数组应包含数组/元组。试试这个:

return Things.findAll({
  attributes: [
    'id',
    'status',
    'otherField'
  ],
  limit: 2,
  order: [ 
    ['id', 'DESC']
  ]
})

答案 1 :(得分:0)

默认情况下,序列化在每个表中创建createdAt列。因此,您可以通过执行以下操作来解决此问题:

return Things.findAll({
  attributes: [
    'id',
    'status',
    'otherField'
  ],
  limit: 2,
  order: [ 
    ['createdAt', 'DESC']
  ]
})

使用列createdAt作为参数进行排序,排序结果与使用id列的结果相同