我想使用主键运行带有结果排序的查询,并且还限制返回结果的数量。例如:
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。
谢谢。
答案 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
列的结果相同