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

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

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

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

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

Вышеупомянутый SQL-запрос выполняется на сервере mysql, и для этого запроса есть результаты.

Почему он не получает данные для запроса sequelize?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
3 417
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не могли бы вы попробовать,

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

Продолжить генерировать:

Executing (default): SELECT MAX(profile_id) FROM 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: {}
        },
    }
}

Sometimes you might be expecting a massive dataset that you just want to display, without manipulation. For each row you select, Sequelize creates an instance with functions for update, delete, get associations etc. If you have thousands of rows, this might take some time. If you only need the raw data and don't want to update anything, you can do like this to get the raw data.

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

Удачи!

Может тогда ответ выкинуть как правильный? Чтобы следующий человек узнал об этом

Uladzislau Vavilau 15.09.2018 22:13

Готово ... Спасибо :)

weeraa 16.09.2018 18:12

Другие вопросы по теме