SequelizeJS:使用数字作为字符串时,列值的顺序错误

时间:2019-01-05 19:08:04

标签: postgresql sequelize.js

我是SequelizeJS的新手,并将其用于带有NodeJS应用程序的PostgreSQL。

我有一张桌子:

sequelize.define('log', {
    id: {
        type: type.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    statusCode: type.INTEGER,
    status: type.STRING,
    message: type.TEXT,
    lastRecordId: type.STRING,
    lastRecordTime: type.DATE
});

问题是,当我运行查询以lastRecordId顺序从DESC列中获取值时,我得到了错误的值顺序:

Wrong order of values

我不想在该列上使用INTEGERBIGINT,因为它包含的代码不是实数。

我正在使用的查询是:

        LoggerModel
            .findAll({
                order: [ [ 'lastRecordId', 'DESC' ]],
            })
            .then( allLogs => {
                //...
            })

2 个答案:

答案 0 :(得分:1)

您可以即时投放它,而无需更改列的类型。然后,您可以订购。

LoggerModel
        .findAll({
            order: [
                     sequelize.cast('lastRecordId', 'BIGINT'),
                     [ 'lastRecordId', 'DESC' ]
              ],
        })
        .then( allLogs => {
            //...
        })

inspired by this

答案 1 :(得分:0)

我已经使用@bereket的答案和答案here找到了解决方案。 对我有用的是:

    LoggModel
        .findAll({
            order: [
                [ sequelize.cast(sequelize.col('lastRecordId'), 'BIGINT') , 'DESC' ]
            ]
        })
        .then((logs) => { /// })