【问题标题】:Sequelize ORM get max id by groupingSequelize ORM通过分组获取最大id
【发布时间】:2019-02-18 11:37:50
【问题描述】:

我在我的 nodejs 项目中使用 sequelize ORM 进行 DB 操作。在这里,我编写了一个简单的 sequelize 查询来检索驱动程序位置模型中每个驱动程序的最大 ID。

 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-query在mysql服务器中执行,查询有结果。

为什么不检索数据以进行 sequelize 查询?

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    你可以试试吗,

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

    续集生成:

    执行(默认):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: {}
            },
        }
    }
    

    有时您可能会期待一个您想要的海量数据集 显示,无需操纵。对于您选择的每一行,Sequelize 创建具有更新、删除、获取功能的实例 关联等。如果您有数千行,这可能需要一些 时间。如果您只需要原始数据并且不想更新任何内容, 你可以这样做来获取原始数据。

    Read docs

    祝你好运!

    【讨论】:

    • 然后可以将答案扫描为正确吗?让下一个人知道这件事
    • 完成...谢谢:)
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2018-03-04
    • 2016-06-11
    相关资源
    最近更新 更多