Graphql 从字段解析程序上的父节点获取数据

Graphql 从字段解析程序上的父节点获取数据,graphql,Graphql,因此,如果可能的话,我想做的是使一个GraphQL像这样: { people { _id name acted { _id title coactors { name } } } } 所以我要做的是,找演员(人),然后找他们演的电影,这很好。所以我想让那部电影里的演员们一起演。我想将当前参与者的id作为如下参数传递给co-actors字段: { people { _id

因此,如果可能的话,我想做的是使一个
GraphQL
像这样:

{
  people {
    _id
    name
    acted {
      _id
      title
      coactors {
        name
      }
    }
  }
}
所以我要做的是,找演员(人),然后找他们演的电影,这很好。所以我想让那部电影里的演员们一起演。我想将当前参与者的id作为如下参数传递给co-actors字段:

{
  people {
    _id
    name
    acted {
      _id
      title
      coactors(actor: people._id) {
        name
      }
    }
  }
}
显然,我得到了一个错误,不知道是否可以在内部作出

以下是我的类型:

const MovieType = new GraphQLObjectType({ name: 'movie', fields: () => ({ _id: { type: GraphQLInt }, title: { type: GraphQLString }, tagline: { type: GraphQLString }, released: { type: GraphQLInt }, actors: { type: new GraphQLList(PersonType), resolve: (movie) => { return []; } }, coactors: { type: new GraphQLList(PersonType), args: { actor: { type: GraphQLInt } }, resolve: (movie, args) => { getCoActorsFor(movie, args.actor) // How can I do something like this .then((actors) => { return actors; }) } } }) }); const PersonType = new GraphQLObjectType({ name: 'person', fields: ()=> ({ _id: { type: GraphQLInt }, name: { type: GraphQLString }, born: { type: GraphQLInt }, acted: { type: new GraphQLList(MovieType), resolve: (person) => { return []; } } }) }); const MovieType=新的GraphQLObjectType({ 名称:"电影",, 字段:()=>({ _身份证:{ 类型:GraphQLInt }, 标题:{ 类型:GraphQLString }, 标语:{ 类型:GraphQLString }, 发布:{ 类型:GraphQLInt }, 参与者:{ 类型:新的GraphQList(PersonType), 解决:(电影)=>{ 返回[]; } }, 合作者:{ 类型:新的GraphQList(PersonType), args:{ 演员:{ 类型:GraphQLInt } }, 解析:(电影,args)=>{ getCoActorsFor(movie,args.actor)//我如何做这样的事情 .然后((演员)=>{ 返回演员; }) } } }) }); const PersonType=新的GraphQLObjectType({ 姓名:'人', 字段:()=>({ _身份证:{ 类型:GraphQLInt }, 姓名:{ 类型:GraphQLString }, 出生:{ 类型:GraphQLInt }, 行动:{ 类型:新图形列表(MovieType), 解决:(人)=>{ 返回[]; } } }) });
如果不将查询分为两个查询,这是不可能的,因此您需要将第一个查询的结果作为变量提供给参与者,以便参与者提供给第二个查询

与使用变量不同,您可以让“acted”返回的movies对象包含对actor的引用,而不是当您请求“coactors”时,您手头有这些信息来执行您试图执行的操作


然而,这种类型的API也是一种反模式——如果子对象依赖于父对象的上下文,那么缓存和理解就会困难得多。我想你应该问问自己,为什么一个电影对象除了返回演员外还必须返回coactor。如果协理者只是相同的参与者列表,但删除了原始参与者,那么这似乎很容易发生在客户机上,因为客户机上的上下文信息更容易获得

是的,我可以在客户端处理它,我想知道是否有一种方法可以访问父节点,我在想,当我们定义de QueryType(?)