将附加运算符的顺序转换为 sequelize

Convert order by additional operator to sequelize

我想将查询 MySQL 转换为 sequelize,但我不知道

SELECT * FROM `RewardEntries`
    ORDER BY `RewardEntries`.`happinessPoint` + `RewardEntries`.`moneyPoint` + `RewardEntries`.`healthyPoint` DESC

请帮帮我

谢谢

可能有更优雅的方法来做到这一点。我已经用 PostgreSQL 对此进行了测试,尽管同样适用于 MySQL。

let rewards = await RewardEntry.findAll({                                                                                                                               
      order: [
        [ sequelize.literal('happinesspoint + moneypoint + healthypoint'), 'DESC' ]
      ]
    })

这是一个完整的示例。数据库中 table 的名称及其所有列均为小写。这就是查询中只有小写字母的原因。

let {
        Sequelize,
        DataTypes,
    } = require('sequelize')

async function run () {
    let sequelize = new Sequelize('mydb', 'username', 'password', {
            host:       'localhost',
            port:       5432,
            dialect:    'postgres',
            logging:    console.log
        })
    
    let RewardEntry = sequelize.define('RewardEntry', {
            id: {
                type: DataTypes.INTEGER,
                allowNull: false,
                primaryKey: true
            },
            HappinessPoint: {
                type: DataTypes.INTEGER,
                field: 'happinesspoint'
            },
            MoneyPoint: {
                type: DataTypes.INTEGER,
                field: 'moneypoint'
            },
            HealthyPoint: {
                type: DataTypes.INTEGER,
                field: 'healthypoint'
            }
        },
        {
            tableName: 'rewardentries',
            timestamps: false
        })
    
    let rewards = await RewardEntry.findAll({
            order: [
                [ sequelize.literal('happinesspoint + moneypoint + healthypoint'), 'DESC' ]
            ]
        })

    console.log(JSON.stringify(rewards, null, 2))

    await sequelize.close()
}

run()