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

时间:2017-03-27 11:51:17

标签: mongoose graphql

我有一个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中做到这一点?

1 个答案:

答案 0 :(得分:2)

所以问题是因为mongoose

当我从数据库中获取数据时,即使数据库中的client: {}文档中没有这样的密钥,mongoose也会添加meeting的空嵌入式子文档(和{{ 1}}不显示此字段 - 仅console.log(meeting)打印console.log(meeting.client))。

因此client: {}会尝试返回graphql所需的字段,因为client不是我想象的client