我有一个包含多列的表,当我使用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
原因是优化器可能会使用索引来检索数据,并且索引中按该顺序列出了行。