Facebook 炫耀在打开 graphql 时提交递归查询的能力,我正在努力寻找能够让您高效(联网)且轻松地执行此操作的文档。
准确地说,我可能希望查询子项(名称)> 名称子项(curName)[名称子项...],直到我用尽整个树而不在查询本身中输入任意数量的分支(如果可能)。
Facebook 炫耀在打开 graphql 时提交递归查询的能力,我正在努力寻找能够让您高效(联网)且轻松地执行此操作的文档。
准确地说,我可能希望查询子项(名称)> 名称子项(curName)[名称子项...],直到我用尽整个树而不在查询本身中输入任意数量的分支(如果可能)。
字段解析器实际上解决了它。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
。
上面的代码是一种伪代码,希望它解释清楚。
干杯,罗恩