node.js - 为 sequelize findAll 添加限制会破坏查询吗?

标签 node.js postgresql sequelize.js

我正在尝试返回一组 Model,使用 limitoffset 分页,包括该模型收藏夹的分组计数.一个相当微不足道的尝试。

这是我使用 sequelize 的基本查询设置:

var perPage = 12;
var page = 1;

return Model.findAll({

    group: [ 'model.id', 'favorites.id' ],
    attributes: [
        '*',
        [ Sequelize.fn('count', Sequelize.col('favorites.id')), 'favorites_count' ]
    ],
    include: [
        { attributes: [], model: Favorite },
    ],
    offset: perPage * page

这会生成(相当)预期的查询:

SELECT          "model"."id",
                "model".*,
                Count("favorites"."id") AS "favorites_count",
                "favorites"."id"        AS "favorites.id"
FROM            "model"                 AS "model"
LEFT OUTER JOIN "favorite"              AS "favorites"
ON              "model"."id" = "favorites"."model_id"
GROUP BY        "model"."id",
                "favorites"."id" offset 12;

忽略它引用表格的事实,它选择 favorites.id(迫使我将它添加到 group by 子句),并且它随机将事物别名为它们的确切名称或像 "favorites.id" 这样无意义的名称(都是不需要的),它似乎奏效了。但是现在让我们完成分页并将限制添加到查询中:

...
offset: perPage * page
limit: perPage

它现在生成这个查询:

SELECT "model".*,
    "favorites"."id" AS "favorites.id"
FROM   (SELECT "model"."id",
            "model".*,
            Count("favorites"."id") AS "favorites_count"
        FROM   "model" AS "model"
        GROUP  BY "model"."id",
                "favorites"."id"
        LIMIT  12 offset 12) AS "model"
    LEFT OUTER JOIN "favorite" AS "favorites"
                    ON "model"."id" = "favorites"."model";

在完全令人费解的行为中,它生成了一个内部查询并将限制仅应用于该查询,然后将其别名为 “model”

作为完整性检查,我查看了 findAll 的文档,但文档 do not seem to think that command exists .

我怀疑我做错了什么,但我不知道是什么。这种行为非常奇怪,我希望我的 sleep 不足是造成我困惑的原因。

我正在使用版本 2.0.6

最佳答案

关于node.js - 为 sequelize findAll 添加限制会破坏查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936007/

相关文章:

sequelize.js - 默认 getter 不返回值,除非在 Sequelize 中使用 TypeScript 时使用 `getDataValue()`

node.js - 使用 SQLite3 进行单元测试

javascript - 在nodejs中一段时间​​后挂断http连接

ruby-on-rails - [xxx] :Array when trying to use array data on Active Admin table_for (Rails, Postgresql、postgres_ext gem 的错误未定义方法 `to_key')

django - 有什么办法可以将其转换为 django orm 吗?

ruby-on-rails - 连接到 PostgreSQL 数据库时出现 Rails 问题

javascript - 如何最好地编写这段代码,其中 JavaScript 中有这么多 if 条件?

javascript - 在 Node.js/Express 中获取路由错误

node.js - 该请求已被阻止;从 S3 向 EC2 Node 端点发出请求时,内容必须通过 HTTPS 提供错误

javascript - 使用 javascript 从数组对象元素中查找最接近的值