【发布时间】:2020-07-05 00:05:06
【问题描述】:
所以就在昨天,我开始学习 graphql,它真的很有趣,而且实际上很容易学习和理解。我开始阅读一些文章,我发现了 N+1 问题。我在这里找到了这个例子
查询
# getting the top 100 reviews
{
top100Reviews {
body
author {
name
}
}
}
架构
const typeDefs = gql`
type User {
id: ID!
name: String
}
type Review {
id: ID!
body: String
author: User
product: Product
}
type Query {
top100Reviews: [Review]
}
`;
最后是解析器
const resolver = {
Query: {
top100Reviews: () => get100Reviews(),
},
Review: {
author: (review) => getUser(review.authorId),
},
};
他在这篇文章中说
当我们执行以下查询以获取前 100 条评论和相应的作者姓名时,我们首先进行一次调用以从数据库中检索 100 条评论记录,然后对于每条评论,我们再次调用数据库以获取给定作者 ID 的用户详细信息。
我们不能只从解析器中删除 Review 并在 get100Reviews 方法中进行简单的 JOIN(如果我在 sql 中)
如果我们会遇到 N+1 问题,我不明白为什么要使用 Review 解析器,而我们可以在 Query 解析器中进行简单的 JOIN。
我理解 GraphQL 对吗??
请有人在这里阐明一下,然后告诉我。
谢谢!!
【问题讨论】:
-
每种类型都可以单独询问 - 每个类型 [通常] 都有自己的解析器......在父解析器中,您不知道在当前对象旁边是否/应该读取/返回多少子 [字段] [水平] ...搜索
dataloader项目
标签: express graphql apollo-server