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

Javascript Sequelize是在筛选属性时对结果进行分组,javascript,postgresql,sequelize.js,Javascript,Postgresql,Sequelize.js,我有一个包含多个列的表,当我使用attributes选项(过滤掉一些列)进行findAll时,sequelize似乎是根据这些列的值对结果进行分组 在日志中,我可以看到创建的SQL语句,它没有按任何方式分组 你知道会发生什么吗 编辑 添加findAll代码 findAll: function (options, expanded, fields) { var deferred = Q.defer(); var findAllOptions = {}; if(field

我有一个包含多个列的表,当我使用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语句的一部分),则很可能会以索引本身的相同顺序返回数据

即,如果我运行查询:

select * from person
select * from person
where last='Smith'
我可以按以下顺序得到以下结果:

ID            FIRST            LAST
------------  ---------------- -----------------
1             John             Zane
2             Jack             Smith
3             Aaron            Smith
4             Darren           Thompson
5             Dick             Smith
它们很可能是按顺序返回的,因为它们只是以postgresql能够找到它们的最快方式从表中选择的,这可能恰好是它们插入的顺序

现在,如果我运行查询:

select * from person
select * from person
where last='Smith'
假设我有一个关于person(最后一个,第一个)的索引,我很可能会得到以下结果:

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

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

谢谢您的回答,但不是,当我说分组时,我指的是分组。。例如,在您的示例中,如果我“从人中选择最后一个”,我只会得到“smith”一次。这就是我所说的分组。您能发布您的全部信息吗“findall()”调用?您是否手动运行了查询,它是否返回不同的结果?是的,在日志上,我看到的查询非常合理:“从person中选择last”,运行时,它会返回3个Smith。。。