graphql - GraphQL 如何支持 AND-OR 查询条件?
问题描述
我是 GraphQL 的新手。要求从 CUSTOMERS 表中查询所有符合条件的数据,满足条件:GENDER == 'MALE' or 'AGE' >= 20。GQL 应该是什么样的?
解决方案
之前有人提出过类似的建议,但被拒绝了。这意味着 GraphQL 本身不支持它,您必须自己推出它。
根据我所看到的几种方法:
(1) 定义您自己的查询语言,例如stackoverflow或Shopify所做的:
type Query{
customers (query:String) : [Customer]
}
查询变为:
{
customers (query : "GENDER == 'MALE' or 'AGE' >= 20"){
id
name
}
}
(2) 定义您自己的输入对象模型,可以覆盖所有需要的搜索需求。Prisma尝试在OpenCRUD规范中定义一个。你可以看看它的想法。例如,您可以定义一个输入模型,如:
input CustomerFilter {
AND : [CustomerFilter]
OR : [CustomerFilter]
# Define the fields that you support to search
gender : String
gender_not : String
....
....
...
...
age : Int
age_gte : Int
}
type Query{
customers (filter:CustomerFilter) : [Customer]
}
查询变为:
{
customers (filter : {
OR: [
{ gender : 'MALE' } ,
{ age_gte: 20 }
]
}){
id
name
}
}
这是另一个可供参考的过滤器模型。我们的想法是对其进行定制,使其足以处理您的所有应用程序需求,而不会引入任何不必要的过滤复杂性。
此外,如果它可能会返回许多数据,您很可能需要考虑分页之类的东西。这意味着您必须为每个查询的输入参数添加偏移量和限制,以某种方式限制返回的记录数,如果您正在执行基于偏移量的分页,或者如果您想在游标中执行,请查看Relay Specification -基于分页样式。
推荐阅读
- sql - 如何将逗号分隔的数组转换为配置单元中的行
- tensorflow - 如何使用 tf.saved_model 加载模型并调用预测函数 [TENSORFLOW 2.0 API]
- typescript - 只读值上的类型保护
- python-3.x - 如何获取python3数据类实例的索引?
- email - sendmail 在 Slurm Workload Manager 中不起作用(从命令行工作)
- google-bigquery - 将表元数据最后修改信息作为列插入现有表中
- selenium - 无法连接到硒中的chromebrowser 78
- sql - 如何让地理字段填充半径值
- java - 将 @PreAuthorize 添加到服务类时:“在 SecurityContext 中找不到身份验证对象”
- parsing - 有没有办法在自由文本中转义或管理令牌?