作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 GraphQL 的新手。要求从CUSTOMERS表中查询所有符合条件的数据,满足条件:GENDER == 'MALE' or 'AGE' >= 20。GQL应该是什么样的?
最佳答案
有人提出了 similar thing之前但它是rejected .这意味着 GraphQL 本身不支持它,您必须自己推出它。
根据我所见,有几种方法可以做到:
(1)定义自己的查询语言如what 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
}
}
This另一种滤波器模型供引用。这个想法是对其进行量身定制,使其足以处理您所有的应用程序需求,而不会引入任何不必要的过滤复杂性。
另外,如果它可能会返回许多数据,您很可能需要考虑分页之类的东西。这意味着如果您正在进行基于偏移量的分页或查看 Relay Specification,则必须为每个查询的输入参数添加偏移量和限制以某种方式限制返回的记录数。如果您想以基于光标的分页样式进行操作。
关于graphql - GraphQL 如何支持 AND-OR 查询条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59341471/
我是一名优秀的程序员,十分优秀!