支持GraphQL中的聚合函数

时间:2016-01-27 11:33:57

标签: graphql

我对GraphQL非常感兴趣的解析解决方案(想想显示图形的webapp)。但我找不到任何使用聚合函数的GraphQL示例。这是我的前端完成的大多数查询的主要方面。

对于我的解决方案,我们有3个典型的后端调用。

  1. 搜索
  2. 聚合
  3. 时间序列
  4. 假设我们在GraphQL中指定了这种类型

    type Person {
      name: String
      age: Int
      create_time: Date
    }
    
    1. 搜索
    2. GraphQL似乎很好地处理了这个问题。这里没问题。

      离。搜索名为Bob的人的年龄 {   人(姓名:" Bob"){     年龄   } }

      1. 聚合
      2. 这是我想在饼图中显示信息的典型情况。所以,我想说按年龄计算人数。

        这是PostgreSQL查询:

        SELECT age, count(*) from Ticket group by age;
        

        GraphQL中的等价物是什么?

        1. 时间序列 这是典型的情况,我想在BarChart中显示信息,X轴为时间。
        2. 离。假设我想计算每小时创建用户的数量。

          这是PostgreSQL查询:

          SELECT date_trunc('hour', create_time) as create_time_bin, count(*) from Person group by create_time_bin order by create_time_bin ASC;
          

          GraphQL等效查询是什么?

3 个答案:

答案 0 :(得分:12)

GraphQL,在一天结束时,使用您定义的类型进行响应。您只需将该数据放入类型中即可。无论这是针对这些不同查询的特定类型,还是针对现有类型的数据的字段,都取决于您,但这完全可以归结为。 GraphQL在定义类型和所有查询将返回的内容方面确实需要更多的努力,这使得它更加严格,但是其他方面的想法是一些很酷的功能,比如内省和类型检查。如果从某种意义上来说,将某种特定的" ad hoc"将数据结构转换为GraphQL类型,如果需要其他数据源,则使用非GraphQL端点并非违法。

答案 1 :(得分:6)

@Damien,这些问题不是GraphQL的问题。

每当您想在GraphQL中执行某些操作时,您必须定义返回数据的类型您实施的功能的规范,有时还需要输入数据的类型< / strong>进入您的功能。最后你编写代码来完成这项工作。

实际上,看起来您(重新)用GraphQL语言编写代码。

以想要在饼图中显示信息的示例为例:

SELECT age, count(*) from Ticket group by age;

此处定义您的返回数据是年龄和计数列表:

 type TickGroupByAge {
      age: Int
      count: Int
    }

使用GraphQL语言定义函数或查询:

getTicketGroupByAge : [TickGroupByAge]`

最后写一个函数来实现上面的查询:

async function(){
    const res = await client.query("SELECT age, count(*) from Ticket group by age");
    return res.rows;
}

@Ryan我完全同意你的看法,GraphQL强迫你编写很多类型定义来解决一个简单的任务。出于这个原因,我最终建立了自己的NextQL - GraphQL-liked engine,它类似于GraphQL但更简单。

我的项目支持复杂的嵌套类型定义,这使您无法定义许多无用的定义。

答案 2 :(得分:1)

查看https://github.com/niclasko/Cypher.js(注意:我是作者)

与该问题有关。它可用于查询和汇总来自JSON端点的数据:

load json from "http://url/person" as l return l.age, count(1)

甚至还有条形图功能:

load json from "http://url/person" as l return barchart(toint(l.age)) as age_distribution

下面是查询复杂的JSON文档并对其进行汇总分析的示例:

Cypher.js JSON query example