如何更新`info` graphql中的SelectionSet?

Posted

技术标签:

【中文标题】如何更新`info` graphql中的SelectionSet?【英文标题】:How to update SelectionSet in `info` graphql? 【发布时间】:2021-09-19 17:04:16 【问题描述】:

上下文

我在 python (graphql-core-3) 中使用 graphql,并且我有一个如下所示的 GraphQL 查询。

query One 
  library(id: "library_1") 
    name
    book 
      title
      __typename
    
    __typename
  

当我调查info 对象info.field_nodes[0].selection_set.selections 时,我得到了FieldNodes 的选择集,看起来像这样:

<class 'graphql.language.ast.SelectionSetNode'>
<class 'graphql.pyutils.frozen_list.FrozenList'> [FieldNode at 45:49, FieldNode at 54:95, FieldNode at 100:110]


# FieldNode at 45:49
name

# FieldNode at 54:95
book 
  title
  __typename


# FieldNode at 100:110
__typename

问题

在我的第二个查询集中,我添加了results 字段来包装我的数据。

query All 
  allLibrary 
    results 
      name
      book 
        title
        __typename
      
      __typename
    
    __typename
  

不幸的是,这会导致一个问题,因为查询集是从allLibrary 级别解析的,而不是像第一个示例中的library。这种结构的后果是info.field_nodes[0].selection_set.selections 错误地解析了字段。跳过,我感兴趣的所有领域(namebook__typename)。

<class 'graphql.language.ast.SelectionSetNode'>
<class 'graphql.pyutils.frozen_list.FrozenList'> [FieldNode at 14:147, FieldNode at 133:143] 

# FieldNode at 31:128
results 
  name
  book 
    title
    __typename
  
  __typename


# FieldNode at 133:143
__typename

问题

如何修复我的info.field_nodes[0].selection_set 以便正确获取FieldNode

【问题讨论】:

【参考方案1】:

答案是here。我只需要深入挖掘我的 selection_set。

info.field_nodes[0].selection_set.selections[0].selection_set.selections

【讨论】:

以上是关于如何更新`info` graphql中的SelectionSet?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 graphql 更新集合中的所有记录

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

如何使用 Graphql 动态更新一个表中的多行

GraphQL 订阅:如何根据订阅中的事件更新对象

应该如何对列表中的项目进行重新排序,并更新多个对象,如何使用 GraphQL 突变进行持久化?

如何将对象列表或数组传递到旨在更新单个对象的 GraphQL 突变中?