首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿波罗GraphQL服务器中的混叠字段

阿波罗GraphQL服务器中的混叠字段
EN

Stack Overflow用户
提问于 2020-04-07 21:43:43
回答 2查看 1.5K关注 0票数 0

混叠是非常方便和工作时,混叠一个特定的解决方案。例如:

代码语言:javascript
复制
{
  admins: users(type:"admin"){
    username
  }
  moderators: users(type:"moderators"){
    moderators
  }
}

不过,我不知道如何处理字段本身的混叠。例如:

代码语言:javascript
复制
{
  site_stats {
    hits: sum(field: "hits")
    bounces: sum(field: "bounces")
  }
}

如果解析器返回任何sum值,则相同的值将别名为hitsbounces (这很有意义,因为甚至只能返回单个和值)。如果我使解析器在返回结果时使用别名作为字段名,则hitsbounces都成为null

我可以简单地将这些字段分解成单独的解析器,但这会使前端开发人员的集成变得复杂。我们还将失去大量的效率效益,因为我可以将单个查询中所需的所有数据聚合到数据源(我们使用的是ElasticSearch)。

来自你们天才的任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-08 15:02:47

使用别名和单个字段的的可用性非常有限。

您可以使用复杂的过滤器(输入参数),f.e。要返回的密钥列表及其关联的params,f.e。

代码语言:javascript
复制
[{name:"hits", range:"month"}, 
{name:"bounces", range:"year"}]

具有查询期望结构

代码语言:javascript
复制
{
  stats {
    name
    sum
    average
  }
}

所需字段可能会有所不同,f.e。只有namesum

可以返回对象f.e的数组。

代码语言:javascript
复制
{ stats: [
  { name:"hits", 
    sum:12345, 
    average: 456 }

别名在这里可以用于选择不同的数据集f.e。namesumhitsbouncesaverage

..。更具声明性?

PS。没有什么是“使前端开发人员的集成复杂化”的。结果为json,在需要时可在取(clinet端)后进行转换/转换/适应。

票数 1
EN

Stack Overflow用户

发布于 2020-04-07 23:08:24

听起来,您将所有的逻辑都放在根级解析器(site_stats)中,而不是为sum字段提供解析器。换句话说,如果您的解析器如下所示:

代码语言:javascript
复制
const resolvers = {
  Query: {
    site_stats: () => {
      ...
      return { sum: someValue }
    },
  },
}

相反,您应该这样做:

代码语言:javascript
复制
const resolvers = {
  Query: {
    site_stats: () => {
      return {} // empty object
    },
  },
  SiteStats: {
    sum: () => {
      ...
      return someValue
    },
  },
}

这样,您就不会从父服务器传递sum的值并依赖于默认的解析器--而是在解析器中显式地为sum提供值。由于sum解析器将为每个别名分别调用该别名的参数,因此每个别名都将相应地进行解析。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61089875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档