graphql能否返回聚合计数?

graphql能否返回聚合计数?,graphql,Graphql,Graphql很棒,我已经开始在我的应用程序中使用它。我有一个显示摘要信息的页面,我需要graphql返回聚合计数?这可以做到吗?GraphQL本身没有自动聚合函数 您可以添加一个名为summary的字段,并在resolve函数中计算总计 。。。需要graphql返回聚合计数吗?这能做到吗 是的,可以做到 GraphQL是否自动为您执行此操作?不,因为它不知道/不关心您从哪里获得数据源 怎么做?GraphQL不指定如何获取/修改用户查询的数据。获取请求的聚合数据取决于您的实现。您可以直接从Mon

Graphql很棒,我已经开始在我的应用程序中使用它。我有一个显示摘要信息的页面,我需要graphql返回聚合计数?这可以做到吗?

GraphQL本身没有自动聚合函数

您可以添加一个名为
summary
的字段,并在
resolve
函数中计算总计

。。。需要graphql返回聚合计数吗?这能做到吗

是的,可以做到

GraphQL是否自动为您执行此操作?不,因为它不知道/不关心您从哪里获得数据源


怎么做?GraphQL不指定如何获取/修改用户查询的数据。获取请求的聚合数据取决于您的实现。您可以直接从MongoDB获取聚合数据并将其返回,也可以从数据源获取所需的所有数据并自己进行聚合。

您可以定义一个新的GraphQL类型,它是一个包含列表和数字的对象。该数字将由解析器函数定义

在GraphQL服务器上,您可以定义解析器函数,作为其中的一部分,您必须编写代码来执行获取聚合计数所需的任何计算和查询

这类似于为REST API或自定义REST API端点编写对象序列化程序的方式,该端点运行计算聚合计数所需的任何数据库查询


GraphQL的优势在于它使前端在确定具体返回的数据方面具有更大的能力。在GraphQL中编写的某些内容将与为REST API编写的内容相同。

您应该在GraphQL中定义聚合数据的类型以及要实现它的函数。例如,如果要编写以下查询:

按年龄从学生组中选择年龄、总和(分数)

您应该定义要返回的数据类型:

 type StudentScoreByAge{
      age: Int
      sumOfScore: Float
    }
和一个Graphql函数:

 getStudentScoreByAge : [StudentScoreByAge]
    async function(){
        const res = await client.query("SELECT age, sum(score) as sumOfScore 
                                        from Student group by age");
        return res.rows;
    }

这取决于您是否将聚合器构建到模式中并能够解析字段

你能分享你正在运行的GraphQL服务器吗?因为不同的语言有不同的实现,也有不同的服务(如Hasura、8base和Prisma)

另外,当你说“计数”时,我想象的是一段关系中的物体计数。例如:

query {
  user(id: "1") {
    name
    summaries {
      count
    }
  }
}

// returns
{
  "data": {
    "user": {
      "name": "Steve",
      "summaries": {
        "count": 10
      }
    }
  }
}

8base在关系查询中默认提供计数聚合。

如果您使用的是Hasura,则在资源管理器中,您肯定可以看到一个“agregate”表名,因此,您的查询将类似于以下内容:

query queryTable {
 table_name { 
  field1
  field2
}
table_name_aggregate { 
aggregate { count } 
  } 
}
在结果中,您将看到查询的总行数

"table_name_aggregate": {
      "aggregate": {
        "count": 9973
      }

很好的解释!我认为主要的要点是GraphQL不能为您进行计算和聚合。所有这些都应该发生在GraphQL查询对象的resolve函数中,该函数需要被告知检索所需的预聚合数据,对其进行处理,然后返回结果。