为什么无法在graphql中过滤深层嵌套查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么无法在graphql中过滤深层嵌套查询?相关的知识,希望对你有一定的参考价值。

所以我最近才开始使用graphql(准确地说是上周)。我有一个能够使用“ where”参数过滤查询的概念,但我注意到当我尝试从深度嵌套查询中获取对象时,这几乎变得不可能。因此,说我有“ domestic_worker_nextofkin”查询,该查询应获取全名,mobile_phone1和“已存档” _is_null等于true的关系,如下所示:

domestic_workers_nextofkin(where: archived:_is_null: true)
    full_name
    mobile_phone1
    domestic_workers_relationships
      relationship
    
  

上面的查询完成了预期的工作,并获得了全名,mobile_phone1和关系。

但是我当前的问题是,当此查询深度嵌套时,如下所示(带星号的代码):

query User($userId: Int) 
     domestic_workers_news
          title
          date_created
          summary
          url
        
    users_user(where: id: _eq: $userId) 
      domestic_workers_pictures(order_by: id: desc, limit: 1) 
        id
      
      id
      password
      username
      first_name
      last_name
      email
      gender
      birth_date
      mobile_phone1
      mobile_phone2
      home_address_street
      home_address_town
      home_address_lga
      home_address_state
      home_address_country
      home_address_postal_code
      job_title
      workplace
      verified
      agreed_terms
      date_joined
      last_modified
      domestic_workers_workers 
        domestic_workers_pictures(order_by: id: desc, limit: 1) 
          id
        
        id
        first_name
        last_name
        other_name
        email
        mobile_phone1
        mobile_phone2
        home_town
        home_state
        service
        birth_date
        gender
        date_created
        current_employer_id
        domestic_workers_relationships
          id
          payment
          payment_currency
          start_date
          relationship
          domestic_workers_agent 
            full_name
            mobile_phone1
            domestic_workers_relationships
              relationship
            
            domestic_workers_pictures(order_by: id: desc, limit: 1) 
              id
            
          


**domestic_workers_nextofkin (where: archived:_is_null: true) 
        full_name
        mobile_phone1
         domestic_workers_relationships
          relationship
        
      
    **
        domestic_workers_reviews 
          id
          score
          summary
          date_created
          users_user 
            first_name
            last_name
            domestic_workers_pictures(order_by: id: desc, limit: 1) 
              id
            
          
        
        employerRelationships: domestic_workers_relationships(order_by: id: desc, limit: 1, where: relationship: _eq: "Employer") 
         end_date
         relationship
        
      
    
   

它以红色突出显示“ where”参数,这可能意味着不应将“ where”参数放在此处,这对我来说似乎很混乱。谁能解释为什么会发生这种情况,并向我展示解决方法以完成我要执行的任务?谢谢。

答案

来自the docs

where参数也可以在数组关系中使用,以过滤嵌套对象。 对象关系仅具有一个嵌套对象,因此它们不公开where参数。

users_user对象关系(它返回单个对象而不是它们的数组),因此无法对其进行过滤。

以上是关于为什么无法在graphql中过滤深层嵌套查询?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL/Graph.cool 查询过滤嵌套关系

在 AWS Amplify GraphQL DynamoDB 中按另一个表的字段(也称为交叉表或嵌套过滤)过滤列表查询

嵌套查询 GraphQl

在 spring boot 中使用 graphql-java 我无法在嵌套列表中查询数据

如何使用 reactjs 和 graphql 在 gatsby 中映射嵌套数组

为啥我的 graphql 嵌套查询返回 null?