gpt4 book ai didi

javascript - 当我过滤属性时,Sequelize 对结果进行分组

转载 作者:行者123 更新时间:2023-12-03 22:29:34 25 4
gpt4 key购买 nike

我有一个包含多列的表,当我使用属性选项(以过滤掉某些列)执行 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 用于 promise ,尽管我认为这并不重要。

最佳答案

当您说“分组”时,我假设您的意思是“排序”(不同之处在于,分组需要多行并将它们放在 1 行中,其中某些值相等,而排序依据是将所有行都相同value 并将它们按顺序排列,这会将该列中具有相同值的行“分组”在一起)

当不使用“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

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

关于javascript - 当我过滤属性时,Sequelize 对结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20147944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com