Vis*_*tty 2 graphql express-graphql hasura
我一直在研究GraphQL并触发查询以将JSON响应放入react应用程序。
但是我需要触发一个查询,该查询将返回该列的最大值和最小值。
我遍历了GraphQL的文档,但无处找不到实现此目的的方法。
{
schneider(where: {_and: [{device_time: {_gte: "2018-09-04T20:11:42.097+05:30"}}, {device_time: {_lte: "2018-09-04T20:12:43.187+05:30"}}]}) {
active_energy_received
}
}
Run Code Online (Sandbox Code Playgroud)
上面的查询为我提供了两个提供的日期之间的值的列表。
{
"data": {
"schneider": [
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0
},
{
"active_energy_received": 4.3699998856
},
{
"active_energy_received": 0.82099998
},
{
"active_energy_received": 0.82099998
},
{
"active_energy_received": 4.3699998856
},
{
"active_energy_received": 0.82099998
},
{
"active_energy_received": 4.3699998856
},
{
"active_energy_received": 0.82099998
},
{
"active_energy_received": 4.3699998856
},
{
"active_energy_received": 0.82099998
},
{
"active_energy_received": 4.3699998856
},
{
"active_energy_received": 0.82099998
},
{
"active_energy_received": 4.3699998856
},
{
"active_energy_received": 0
},
{
"active_energy_received": 0.820999979972839
},
{
"active_energy_received": 4.3699998856
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我只希望此列表中的最大值和最小值而不是所有值。
更新:
我将hasura.io与postgreSQL一起使用。
小智 5
如果你正在使用Hasura.io那么你可以使用自定义的API查询ORDER BY,并LIMIT为MIN和MAX结果。
MAX值示例:
query {
table_name(limit: 1, order_by: {time: desc}) {
data
time
}
}
Run Code Online (Sandbox Code Playgroud)
MIN值示例:
query {
table_name(limit: 1, order_by: {time: asc}) {
data
time
}
}
Run Code Online (Sandbox Code Playgroud)
GraphQL 没有原生方法来执行此操作。(如果 SQL 是您的基础,那么除了简单的列选择之外,还有很多诸如ORDER BY、 、GROUP BY之类的东西 GraphQL 本身不提供。)
如果服务器已修复但您收到了查询响应,则可以在客户端自行计算聚合。
如果您也控制服务器,并且发现自己需要这样的聚合,则可以将它们添加到架构中。鉴于您的示例查询,我可能会在查询及其结果之间添加一个间接层。
type Query {
schneider(where: SchneiderQuery): SchneiderPayload!
}
type SchneiderPayload {
results: [SchneiderResult!]!
max: SchneiderResult
min: SchneiderResult
}
Run Code Online (Sandbox Code Playgroud)
使用该模式,您可以编写如下查询
{
schneider(where: { ... }) {
max { active_energy_received }
}
}
Run Code Online (Sandbox Code Playgroud)
在您的服务器代码中,您必须为max生成正确查询的字段提供一个特殊的解析器。
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |