繁体   English   中英

当我过滤属性时,Sequelize将结果分组

[英]Sequelize is grouping results when I filter the attributes

我有一个包含几列的表,当我使用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来实现承诺,尽管我认为这并不重要。

当您说“分组”时,我假设您的意思是“排序”(区别在于分组需要多行,然后将它们放到1行中,其中某些值相等,而排序依据则是将所有具有相同值的行值并按顺序排列它们,从而将该列中具有相同值的行“分组”在一起)

当不使用“ order by”时,postgresql将以最有效的顺序返回数据。 如果您的查询包含一个谓词(where语句的一部分),该谓词引用了属于索引一部分的列,则很可能数据将以与索引本身相同的顺序返回。

IE浏览器,如果我运行查询:

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'

假设我有一个关于person(last,first)的索引,则很有可能按顺序获得以下结果:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM