Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GraphQL如何支持AND-OR查询条件?_Graphql_Graphql Java - Fatal编程技术网

GraphQL如何支持AND-OR查询条件?

GraphQL如何支持AND-OR查询条件?,graphql,graphql-java,Graphql,Graphql Java,我是GraphQL新手。需要从CUSTOMERS表中查询所有符合条件的数据,该表满足以下条件:性别==‘男性’或‘年龄’>=20。GQL应该是什么样子的 您需要定义查询、模式和解析器。您的查询如下所示: type Query { nameItAsPerUsecase: Customer } 架构如下所示: type Customer{ name : String age: Int .. add more fields as per as your need } 您的解析器如下所

我是GraphQL新手。需要从CUSTOMERS表中查询所有符合条件的数据,该表满足以下条件:性别==‘男性’或‘年龄’>=20。GQL应该是什么样子的

您需要定义查询、模式和解析器。您的查询如下所示:

type Query {
    nameItAsPerUsecase: Customer
}
架构如下所示:

type Customer{
 name : String
 age: Int
 .. add more fields as per as your need
}
您的解析器如下所示:-

@Component
public class CustomerQuery implements GraphQLQueryResolver {

  @Autowired
  private CustomerRepository customerRepository ;

  public Customer getNameItAsPerUsecase() {

    return customerRepository.findByGenderAndAgeGreaterThanEqual(String gender, int age);
  }
}
以前有人提出过一个建议,但事实并非如此。这意味着GraphQL在本机上不支持它,您必须自己推出它

根据我所看到的情况,有几种方法可以做到这一点:

(1) 定义您自己的查询语言,例如什么或做什么:

查询变成:

{
  customers (query : "GENDER == 'MALE' or 'AGE' >= 20"){
    id
    name
  }
}
{
  customers (filter : {
   OR: [
     { gender : 'MALE' } ,
     { age_gte: 20 }
    ]
  }){
    id
    name
  }
}
(2) 定义您自己的输入对象模型,可以覆盖所有必需的搜索需求。试着在规范中定义一个。你可以看看它的想法。例如,您可以定义如下输入模型:

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 (query : "GENDER == 'MALE' or 'AGE' >= 20"){
    id
    name
  }
}
{
  customers (filter : {
   OR: [
     { gender : 'MALE' } ,
     { age_gte: 20 }
    ]
  }){
    id
    name
  }
}
是另一个可供参考的过滤器模型。我们的想法是定制它,这样它就足以处理所有的应用程序需求,而不会引入任何不必要的过滤复杂性

此外,如果可能会返回许多数据,您可能需要考虑一些类似分页之类的内容。这意味着您必须为每个查询的输入参数添加一个偏移量和限制,以便在执行基于偏移量的分页时以某种方式限制返回的记录数,或者在使用基于光标的分页样式时查看返回的记录数