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从函数中从全局环境中获取对象,但如果不存在则使用不同的默认值