Я использую 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?
Можете ли вы попробовать,
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
ASprofile
GROUP BYuser_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 создает экземпляр с функциями для обновления, удаления, объединения и т.д. Если у вас тысячи строк, это может занять некоторое время. Если вам нужны только необработанные данные и вы ничего не хотите обновлять, вы можете сделать так, чтобы получить необработанные данные.
Удачи!