bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Sequelize численные тип возвращает как строку?

Использую PostgreSQL. Функция SUM("Statistics"."quantityPrinted") AS "quantityPrinted" возвращает строковое значение.

const response = await models.sequelize.query(
    `
    SELECT
      SUM("Statistics"."quantityPrinted") AS "quantityPrinted"
    FROM "Cartridges"
    left JOIN "Statistics" on "Statistics"."cartridgeId" = "Cartridges".id
    WHERE "Cartridges".id = 2
  `,
    { type: models.sequelize.QueryTypes.SELECT }
);


5d5bfca50b442990295256.jpeg

Изменял настройки, но работает только для MySQL.
dialectOptions: {
    supportBigNumbers: true,
    bigNumberStrings: false
  }


P.S. Реально у меня намного сложней запрос, который средствами ORM не построить.
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
bogdan_uman
@bogdan_uman Автор вопроса
шлЫмазл неукЪ-поцЪ
Решение нашел простое

const pg = require('pg');

// https://github.com/sequelize/sequelize/issues/4550
pg.defaults.parseInt8 = true;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alekseyHunter
Охотник за знаниями
"Модуль pg, используемый для sequelize, возвращает bigint как строку. Максимальное значение BIGINT равно 2 ^ 63-1, javascript может безопасно отображать до 2 ^ 53. Измените модель для использования целого числа (DataTypes.INTEGER)." @Google


Первый вариант: оставить как есть, применять конвертирование из строки в число.

Второй вариант: возвращать массив, который самостоятельно посчитаете.
Ответ написан
@vgbege
числа там большие ожидаются?
SELECT cast(SUM("Statistics"."quantityPrinted") as integer) AS "quantityPrinted" не прокатит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы