如何按 Graphql 查询结果分组

Posted

技术标签:

【中文标题】如何按 Graphql 查询结果分组【英文标题】:How to group by Graphql query result 【发布时间】:2019-02-22 09:37:14 【问题描述】:

我有以下 GraphQL 查询

query 
  Result: querydata 
    name
    code
    description
  

返回以下数据


  "data": 
    "Result": [
      
        "name": "Class1",
        "code": "ST1",
        "description": "Value"
      ,
      
        "name": "Class1",
        "code": "ST2",
        "description": "Value"
      ,
      
        "name": "Class2",
        "code": "FS1",
        "description": "Value"
      ,
      
        "name": "Class2",
        "code": "FS2",
        "description": "Value"
      
    ]
  

在此数据中,我有一个名称字段,它可以是“Class1”或“Class2”。我不想以可以将 Class1 和 Class2 数据分开的方式对这些数据进行分组。有没有办法做到这一点。我可以通过提供名称过滤器运行 2 个单独的查询来实现这一点,但可以说我没有那个选项。

我想将结果转换如下


  "data": 
    "Result": [
      "Class1": [
          
            "code": "ST1",
            "description": "Value"
          ,
          
            "code": "ST2",
            "description": "Value"
          
      ]

      "Class2": [
          
            "code": "FS1",
            "description": "Value"
          ,
          
            "code": "FS2",
            "description": "Value"
          
      ]
    ]
  

【问题讨论】:

您实现过目标吗?我正在尝试做类似的事情,以便在 Grafana 中更轻松地使用数据。 是的,我通过转换查询类型和关联的类对象来管理它。 @Austio 也提出了类似的建议。 事实上,我在服务器端 (API) 和 Clint 端 (Vuejs) 过滤/分组等查询类型转换都与 Underscore.js 库一起使用。根据给定的场景,如果 API 返回的数据需要预先格式化,或者我们可以只返回平面类型的 ov 结构,客户端将根据需要进行格式化。 【参考方案1】:

您所描述的是应该在客户端发生的事情,或者允许您的查询类型接收您用来返回propper类的名称选项,那么下面的查询将适用于您所需要的假设它是能够查找查询数据的名称

query 
  Class1: querydata(name: "Class1") 
    code
    description
  
  Class2: querydata(name: "Class2") 
    code
    description
  

【讨论】:

是的,只有当我在查询类型中操作上下文或我允许名称作为过滤器时,上述查询才会起作用。我想知道是否有任何格式化输出结果的选项。

以上是关于如何按 Graphql 查询结果分组的主要内容,如果未能解决你的问题,请参考以下文章

在 GraphQL 查询中分组后如何限制和跳过标签列表页面的分页?

GraphQL 中的分组查询(不是“分组依据”)

按关系查询 GraphQL?

有没有办法在 graphQL 中对查询进行分组?

Graphql - 根据出版年份分组剧集

有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?