Sequelize.fn(`ANY_VALUE`,sequelize.col(`col`));不返回任何数据

时间:2018-06-18 15:09:05

标签: mysql sequelize.js

我有一个mysql数据库,其中包含视频库的元数据。我希望能够在我的UI上更改视频的元数据,然后使用更新版本保存新实例,但希望将旧版本保存在我的数据库中。然后,当我使用sequelize.findAll时,我只想返回最新版本。这是我的数据库架构

CREATE TABLE `ututs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `aem_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `locale` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `status` int(11) NOT NULL,
  `version` int(11) NOT NULL DEFAULT 0,
  `metadata` json NOT NULL,
  `validated` json NOT NULL,
  `created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

如果我使用mySQLworkbench,我可以进行此查询

SELECT ANY_VALUE(id), aem_id, ANY_VALUE(`locale`), ANY_VALUE(status), MAX(version), ANY_VALUE(metadata), ANY_VALUE(validated), ANY_VALUE(created_on), ANY_VALUE(modified_on) FROM ututs AS Utut WHERE Utut.locale = 'en_US' AND Utut.status IN (1, 2) GROUP BY aem_id;

并按预期返回数据。但是,当我尝试使用Sequelize进行通话时:

UtutModel.findAll({
      attributes: [
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`id`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`aem_id`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`locale`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`status`)),
        Sequelize.fn(`MAX`, Sequelize.col(`version`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`metadata`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`validated`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`created_on`)),
        Sequelize.fn(`ANY_VALUE`, Sequelize.col(`modified_on`))
      ],
      group: ['aem_id'],
      where: UtutModel.buildWhere(req.query)

我得到了我希望返回的正确条目数,但是,它们缺少每列的数据。

Utut {
    dataValues: {},
    _previousDataValues: {},
    _changed: {},
    _modelOptions: { 
        timestamps: false,
        validate: {},
        freezeTableName: false,
        underscored: true,
        underscoredAll: false,
        paranoid: false,
        rejectOnEmpty: false,
        whereCollection: [Object],
        schema: null,
        schemaDelimiter: '',
        defaultScope: {},
        scopes: [],
        indexes: [],
        name: [Object],
        omitNull: false,
        tableName: 'ututs',
        sequelize: [Object],
        hooks: {},
        uniqueKeys: {} 
   },
   _options: { 
      isNewRecord: false,
      _schema: null,
      _schemaDelimiter: '',
      raw: true,
      attributes: [Array] },
   __eagerlyLoadedAssociations: [],
   isNewRecord: false 
},

有没有办法在续集调用中使用GROUP BY来返回我不使用的数据?

另外,如果我放弃ANY_VALUE fns,我会收到此错误

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'utut.Utut.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

0 个答案:

没有答案