GraphQL仅查询非空对象 [英] Graphql query only not null objects

查看:27
本文介绍了GraphQL仅查询非空对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试执行这样的查询:

{
 people{
   pet{
     name
   }
 }
}

结果:

{
 "people": {
   "pet": null
 }
},
{
 "people": {
   "pet": {
     name: "steve"
  }
 }
}

我想要的是只获得包含宠物的人,有什么方法可以实现这一点而不是在我的解析器上编码吗?

推荐答案

这不可能如您所描述的那样。GraphQL将调用Resolve函数来获取数据。如果你不想让某些数据出现在你的响应中,你必须在服务器上的某个地方用过滤发送。您唯一可以控制的是查询、架构和解析函数。

没有办法完全在查询中表达您的需求。如果您将其放入模式中,您将不再能够查询没有宠物的人。因此,执行此操作的唯一方法是将其写入Resolve函数。例如,您可以将名为hasPet的布尔参数添加到People字段,然后在解析器中执行以下操作:

people(root, { hasPet }){
  // get allPeople
  if (typeof hasPet === 'undefined'){
    return allPeople
  }
  return allPeople.filter((person) => person.hasPet() === hasPet)
}
不幸的是,这将要求您"向前看",并首先确定某人是否有宠物,但是如果您使用DataLoader之类的东西缓存后端或数据库请求,这实际上并不昂贵,因为无论如何您都必须获取宠物。这样,您只需早一点取回即可。

如果您要从数据库中提取人员,那么在那里已经对他们进行过滤操作(而不是在Resolve函数中)当然是有意义的。

这篇关于GraphQL仅查询非空对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆