从字段解析器上的父节点获取数据

Posted

技术标签:

【中文标题】从字段解析器上的父节点获取数据【英文标题】:Get data from parent node on field resolver 【发布时间】:2016-10-03 01:46:25 【问题描述】:

所以如果可能的话,我正在尝试做一个像这样的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( 名称:'电影', 字段:()=>( _ID: 类型:GraphQLInt , 标题: 类型:GraphQLString , 标语: 类型:GraphQLString , 发布: 类型:GraphQLInt , 演员: 类型:新的 GraphQLList(PersonType), 解决:(电影)=> 返回 []; , 合作者: 类型:新的 GraphQLList(PersonType), 参数: 演员: 类型:GraphQLInt , 解决:(电影,参数)=> getCoActorsFor(movie, args.actor) // 我怎样才能做这样的事情 .then((演员) => 返回演员; ) ) ); const PersonType = new GraphQLObjectType( 名称:'人', 字段:()=>( _ID: 类型:GraphQLInt , 姓名: 类型:GraphQLString , 出生: 类型:GraphQLInt , 行动: 类型:新的 GraphQLList(MovieType), 解决:(人)=> 返回 []; ) );

【问题讨论】:

【参考方案1】:

如果不将查询分成两个查询,这是不可能的,因此您可以将第一个查询的结果作为变量提供给参与者以提供给第二个查询。

您可以让“acted”返回的电影对象包含对演员的引用,而不是使用变量,而不是当您要求“coactors”时,您手头有该信息来做您想做的事情做。

然而,这种类型的 API 也是一种反模式——如果子对象依赖于父对象的上下文,那么缓存和理解就会困难得多。我认为您应该问自己为什么 Movie 对象必须返回除了演员之外的合作者。如果 coactors 只是相同的 actor 列表,但删除了原始 actor,那么这似乎很容易在上下文信息更容易获得的客户端上发生。

【讨论】:

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

以上是关于从字段解析器上的父节点获取数据的主要内容,如果未能解决你的问题,请参考以下文章

sql server使用cte递归查询获取树形的父节点/子节点

Xpath 从兄弟节点的父节点获取值

从json数据中获取父子关系中所有子节点的总和

如何重新配置​​平面文件连接管理器上的列信息?

如何从XML节点获取数据?

iview tree 获取选中子节点的整条数据链