Sequlize ORM получить максимальный идентификатор путем группировки

0

Я использую sequlize ORM для работы с БД в моем проекте nodejs. Здесь я написал простой запрос sequlize для извлечения максимальных идентификаторов каждого драйвера в модели driverlocation.

 global.driverlocationhistory.findAll({
        attributes: [global._sequelize.fn("max", global._sequelize.col('id'))],
        group: ["driverId"]
 }).then(function (results) {
        objDrvr = results;
 })

Это не возвращает никакой ценности, а также не дает какой-либо ошибки. Но база данных имеет значения. При выполнении выше sequlize запроса создается SQL-запрос. (Это можно увидеть в окне консоли после запуска сервера с помощью node server.js) Вот исполняемый запрос.

SELECT max('id') FROM 'driverlocationhistory' AS 'driverlocationhistory' GROUP BY 'driverId';

SQL-запрос выше выполняется на сервере mysql и есть результаты для запроса.

Почему он не извлекает данные для запроса sequlize?

Теги:
sequelize.js

1 ответ

1
Лучший ответ

Можете ли вы попробовать,

await DIR.ProfileModel.findAll({
    attributes: [
        [sequelize.fn('MAX', sequelize.col('profile_id')), 'profile_id'],
    ],
    group: ['user_id'],
    raw: true,
});

Sequelize сгенерировать:

Выполнение ( по умолчанию): SELECT MAX (profile_id) из profile AS profile GROUP BY user_id;

И результаты возврата:

{ profile_id: 106 },
{ profile_id: 187 },
{ profile_id: 109 },
{ profile_id: 111 },
{ profile_id: 112 },
{ profile_id: 113 },
{ profile_id: 115 },
{ profile_id: 116 },
{ profile_id: 117 },
{ profile_id: 120 },
{ profile_id: 121 },

Если raw - false, dataValues пуст, я понятия не имею, почему

{
    profile {
        dataValues: {},
        _previousDataValues: {},
        _changed: {},
        _modelOptions:
        {
            timestamps: false,
            validate: {},
            freezeTableName: false,
            underscored: false,
            underscoredAll: false,
            paranoid: false,
            rejectOnEmpty: false,
            whereCollection: null,
            schema: null,
            schemaDelimiter: '',
            defaultScope: {},
            scopes: [],
            indexes: [],
            name: [Object],
            omitNull: false,
            charset: 'utf8',
            collate: 'utf8_general_ci',
            tableName: 'profile',
            sequelize: [Object],
            hooks: [Object],
            uniqueKeys: {}
        },
    }
}

Иногда вы можете ожидать массивный набор данных, который вы просто хотите отобразить, без манипуляций. Для каждой выбранной строки Sequelize создает экземпляр с функциями для обновления, удаления, объединения и т.д. Если у вас тысячи строк, это может занять некоторое время. Если вам нужны только необработанные данные и вы ничего не хотите обновлять, вы можете сделать так, чтобы получить необработанные данные.

Читать документы

Удачи!

  • 0
    Я мог бы получить максимальный идентификатор, используя псевдоним в качестве примера. Это помогло мне ...... Спасибо.
  • 0
    Может тогда выкинуть ответ как правильный? Чтобы следующий человек узнал об этом
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню