在 Sequelize 中限制延迟加载的关联
Posted
技术标签:
【中文标题】在 Sequelize 中限制延迟加载的关联【英文标题】:Limiting lazy loaded associations in Sequelize 【发布时间】:2020-02-22 18:00:29 【问题描述】:我使用Sequelize 5 作为我的 GraphQL API 的 ORM,但在查询关联数据时遇到了性能问题。
假设我有一个User
,它有很多Post
s,所以我的模型定义如下所示:
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
帖子?
【问题讨论】:
【参考方案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,
);
【讨论】:
以上是关于在 Sequelize 中限制延迟加载的关联的主要内容,如果未能解决你的问题,请参考以下文章