别名非常方便,在为特定解析器别名时效果很好。例如:
{
admins: users(type:"admin"){
username
}
moderators: users(type:"moderators"){
moderators
}
}
不过,我不确定如何处理字段的别名。例如:
{
site_stats {
hits: sum(field: "hits")
bounces: sum(field: "bounces")
}
}
如果解析器返回任何sum
值,则相同的值将同时作为hits
和bounces
的别名(这很有意义,因为甚至只能返回一个总和值)。如果让解析器在返回结果时使用别名作为字段名称,则hits
和bounces
都将变为null
。
我可以简单地将这些字段分解为单独的解析器,但这会使前端开发人员的集成变得复杂。因为我可以将单个查询中需要的所有数据聚合到我们的数据源(我们正在使用ElasticSearch),所以我们还将损失大量的效率优势。
非常感谢您的天才!
听起来好像您将所有逻辑都放在根级解析程序(site_stats
)内,而不是为sum
字段提供解析程序。换句话说,如果您的解析器看起来像这样:
const resolvers = {
Query: {
site_stats: () => {
...
return { sum: someValue }
},
},
}
您应该改为执行以下操作:
const resolvers = {
Query: {
site_stats: () => {
return {} // empty object
},
},
SiteStats: {
sum: () => {
...
return someValue
},
},
}
这样,您就不会从父项传递和的值,而不会依赖默认的解析器-您在其解析器中显式提供sum
的值。由于将使用特定于该别名的参数为每个别名分别调用sum
解析器,因此每个别名将相应地进行解析。