Sequelize是在筛选属性时对结果进行分组

Sequelize is grouping results when I filter the attributes

本文关键字:结果 筛选 属性 Sequelize      更新时间:2023-09-26

我有一个包含多列的表,当我使用attributes选项(过滤掉一些列)执行findAll时,sequelize似乎是根据这些列的值对结果进行分组。

在日志中,我可以看到创建的SQL语句,并且它没有按任何内容进行分组。

你知道可能会发生什么吗?

编辑

正在添加findAll代码。

 findAll: function (options, expanded, fields) {
    var deferred = Q.defer();
    var findAllOptions = {};
    if(fields != null) {
       findAllOptions.attributes = fields;
    }
    if(expanded != null) {
       findAllOptions.include = expanded;
    }
    if(options.offset != undefined) {
       findAllOptions.offset = options.offset;
    }
    if(options.limit != undefined) {
       findAllOptions.limit = options.limit;
    }
    if (this.Class.Model !== null) {
       this.Class.Model.findAll(findAllOptions).success(deferred.resolve).error(deferred.reject);
    } else {
       //--- error handling not important
    }
    return deferred.promise;
 }

我也用Q来表示承诺,尽管我认为这并不重要。

当不使用"order by"时,postgresql将以它认为最有效的顺序返回数据。若您的查询包含一个谓词(where语句的一部分),该谓词引用了作为索引一部分的列,则很可能会按照索引本身的相同顺序返回数据。

I.E.如果我运行查询:

select * from person

我可以按照以下顺序得到以下结果:

ID            FIRST            LAST
------------  ---------------- -----------------
1             John             Zane
2             Jack             Smith
3             Aaron            Smith
4             Darren           Thompson
5             Dick             Smith

它们可能会按顺序返回,因为它们只是以postgresql能够找到它们的最快方式从表中选择的,这可能恰好是它们插入的顺序。

现在,如果我运行查询:

select * from person
where last='Smith'

假设我有一个关于人的索引(最后一个,第一个),我很可能会得到以下结果,按顺序排列:

ID            FIRST            LAST
------------  ---------------- -----------------
3             Aaron            Smith
5             Dick             Smith
2             Jack             Smith

原因是优化器可能会使用索引来检索数据,并且索引中按该顺序列出了行。