Graphql - 获取完整的子对象,如果不存在则为 null

Posted

技术标签:

【中文标题】Graphql - 获取完整的子对象,如果不存在则为 null【英文标题】:Graphql - get full sub-object, or null if doesn't exist 【发布时间】:2017-08-20 02:46:07 【问题描述】:

我有一个 graphql 查询,它得到一个 Meeting 对象和 Client 对象:

type Meeting 
  address: String!
  client: Client

type Client 
  displayName: String!

displayName 是必需的,但 client 不是。 如果我将其查询为


  getMeeting(meetingId: "43bbea6ea0c6112b0abcf11d") 
    address
    client 
      displayName
    
  

而且这个会议没有客户,那么我收到一个错误:

Error: Cannot return null for non-nullable field Client.displayName.

我只是希望如果有客户,我会得到它的全部详细信息。如果没有,我会得到client: null

如果我从displayName 中删除所需的,它也将在客户端为空时工作,我会得到

"client": "displayName": null

正如我所料。但我仍在寻找一种方法来强制执行 displayName 上的要求 - 前提是有客户端。

在graphql中有什么方法可以做到这一点吗?

【问题讨论】:

您的查询解析器是什么样子的? 在您发表评论后,我再次检查了解析器,这不是问题,但它帮助我解决了真正的问题,这是因为 mogoose,我在下面发布了一个答案。谢谢! 【参考方案1】:

所以问题是因为mongoose

当我从数据库中获取数据时,猫鼬会添加 client: 的空嵌入子文档,即使数据库中的 meeting 文档中没有这样的键(并且 console.log(meeting) 没有显示此字段 - 仅 console.log(meeting.client) 打印 client: )。

因此graphql 尝试返回client 的必填字段,因为client 不是我想的undefined

【讨论】:

以上是关于Graphql - 获取完整的子对象,如果不存在则为 null的主要内容,如果未能解决你的问题,请参考以下文章

如果不存在则创建新的核心数据对象,或者如果核心数据存在则获取现有对象[重复]

如果对象存在于全局中,则R从函数中从全局环境中获取对象,但如果不存在则使用不同的默认值

GraphQL - 如果父返回类型是对象列表,则模式拼接上的模式委派不起作用

GraphQL 检查区块链上是不是存在交易

将 REST API 获取请求转换为 GraphQL

FaunaDB - 如何批量更新单个 graphQL 突变中的条目列表?