我在我的nodejs项目中使用续集ORM进行DB操作。在这里,我编写了一个简单的续集查询来检索驱动程序位置模型中每个驱动程序的最大 ID。
global.driverlocationhistory.findAll({
attributes: [global._sequelize.fn("max", global._sequelize.col('id'))],
group: ["driverId"]
}).then(function (results) {
objDrvr = results;
})
这不会返回任何值,也不会给出任何类型的错误。但是数据库有值。当执行上述续集查询时,它被创建为SQL查询。(使用节点服务器运行服务器后,可以在控制台窗口中看到.js(下面是正在执行的查询。
SELECT max(`id`) FROM `driverlocationhistory` AS `driverlocationhistory` GROUP BY `driverId`;
上面的SQL查询在mysql服务器中执行,并且有查询的结果。
为什么它不检索数据以进行续集查询?
你能试试吗?
await DIR.ProfileModel.findAll({
attributes: [
[sequelize.fn('MAX', sequelize.col('profile_id')), 'profile_id'],
],
group: ['user_id'],
raw: true,
});
续集生成:
正在执行(默认(:从
profile
中选择 MAX(profile_id
(profile
按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 为假,则数据值为空,我不知道为什么
{
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: {}
},
}
}
有时你可能期待一个你只想要的海量数据集 显示,无需操作。对于您选择的每一行,续集 创建具有更新、删除、获取函数的实例 协会等如果您有数千行,这可能需要一些 时间。如果您只需要原始数据并且不想更新任何内容, 您可以这样做来获取原始数据。
阅读文档
祝你好运!