[英]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.