【问题标题】:Limiting lazy loaded associations in Sequelize在 Sequelize 中限制延迟加载的关联
【发布时间】:2020-02-22 18:00:29
【问题描述】:

我使用Sequelize 5 作为我的 GraphQL API 的 ORM,但在查询关联数据时遇到了性能问题。

假设我有一个User,它有很多Posts,所以我的模型定义如下所示:

class User extends Model { }
User.init({ name: Sequelize.STRING }, { sequelize });

class Post extends Model { }
Post.init({ content: Sequelize.STRING }, { sequelize });

User.hasMany(Post);

现在我从数据库中获取了一个User 模型,我想查询来自该用户的x 数量的帖子。我知道我可以使用 user.getPosts() 获取所有帖子,但这会返回比我需要的更多的记录。

我找到了this answer,它解释了当急切加载使用include选项的关系时如何应用限制,但就我而言,我想延迟加载 em>关系。原因在于 GraphQL 解析器的工作方式。

所以我的问题是:如何获得用户的第一个 x 帖子?

【问题讨论】:

    标签: javascript node.js graphql sequelize.js


    【解决方案1】:

    您可以将额外的find 选项传递给getter。尽管简要提到了here,但这并没有得到很好的记录。所以你可以这样做:

    user.getPosts({
      limit: 10,
      offset: 100,
      where: { /* whatever */ },
      order: [ /* whatever */ ],
      transaction,
      etc.
    })
    

    【讨论】:

    • 我已经阅读了很多文档,但仍然找不到。他们绝对可以在这方面做得更好。非常感谢丹尼尔的帮助!
    【解决方案2】:

    我希望有一个更流畅的界面,但我目前简单地解决了这个问题:

    return db.models.posts.findAll({
        where: { userId: user.id },
        limit: x,
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2014-01-15
      相关资源
      最近更新 更多