使用 Apollo 批量递归查询(graphql)
Posted
技术标签:
【中文标题】使用 Apollo 批量递归查询(graphql)【英文标题】:Recursive queries in a batch with Apollo (graphql) 【发布时间】:2017-08-25 12:40:27 【问题描述】:Facebook 标榜在打开 graphql 时提交递归查询的能力,我正在努力寻找能够让您高效(联网)且轻松地执行此操作的文档。
确切地说,我希望 query child (name) > name child (curName) [ name child ...] 可能直到我用尽整个树而不在查询本身中输入任意数量的分支(如果可能)。
【问题讨论】:
【参考方案1】:字段解析器实际上解决了它。 graphql server 中的查询基本上有两种,一种是根查询解析器,一种是字段解析器。在 apollo 中看下面的例子,但是背后的思路是一样的:
type Person
name: String
friends: [Person]
type Query
allPeople($name: String):[Person]
schema
query: Query
基于上面的 typedef,你可以编写一个根查询解析器,如下所示:
Query:
allPeople: (root, args) => PersonModel.find(where: name: args.name)
您还需要为friends
字段编写解析器,如下所示:
Person:
friends: (root, args) => PersonModel.find(where: friendId: root.id)
由于字段解析器,它可以无限嵌套。
顺便说一句,为了避免太多的sql语句打到db,我们可以引入dataloader
包,它来自facebook,它可以将一个异步链中的所有查询组合成我们在初始化dataloader
时提供的一个批处理查询。
上面的代码是一种伪代码,希望它解释清楚。
干杯, 罗恩
【讨论】:
你从哪里读到关于 root 参数的,因为 apollo 文档很奇怪,而 graphql 是故事的一半? 如果是字段解析器,则根为字段所属的对象。如果是根查询解析器,就是用户传入的值,详情请查看dev.apollodata.com/tools/graphql-server/…。以上是关于使用 Apollo 批量递归查询(graphql)的主要内容,如果未能解决你的问题,请参考以下文章
React Native:为啥使用 Apollo 的 GraphQL 查询返回未定义?
Apollo/Graphql,Postgres - 为啥这个查询返回 null? [复制]
如何使用 apollo / graphql 实现节点查询解析器