为什么我的 sequelize 查询总结了一个十进制列作为字符串返回

Rod*_*Rod 3 javascript node.js sequelize.js

我正在对一个十进制列求和,它以字符串而不是整数的形式返回?

exports.sumMoney = function (id) {
    return myModel.findAll({
        raw: true,
        attributes: [[sequelize.fn('SUM', sequelize.col('moneycol')), 'moneylabel']],
        where: { id: id }
    }).then(r => r);
}
Run Code Online (Sandbox Code Playgroud)

ow3*_*w3n 9

我不确定您使用的是 MySQL 还是 Postgres,但是将其添加到配置中解决了我在 MySQL 上的问题

dialectOptions: {
    decimalNumbers: true
}
Run Code Online (Sandbox Code Playgroud)


小智 5

为了将结果转换为数字,您需要使用 sequelize.cast 函数执行显式转换:

exports.sumMoney = function (id) {
    return myModel.findAll({
        raw: true,
        attributes: [[sequelize.cast(sequelize.fn('SUM', sequelize.col('moneycol')), 'int'), 'moneylabel']],
        where: { id: id }
    }).then(r => r);
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它没有在 sequelize v4 文档中说明,但 v3 指出:

postgres 需要显式转换。

http://sequelize.readthedocs.io/en/v3/api/sequelize/#fnfn-args-sequelizefn