Graphql-如何根据字段的条件获取结果?

问题描述

我有一个如下查询:

query MyQuery {
  products {
    edges {
      node {
        featured
        id
        image {
          altText
          mediaItemUrl
          slug
        }
        productId
        name
        onSale
        
      }
    }
  }
}

我想要的只是获取featured字段为true的结果,如果featured为false,那么它永远不会显示在结果中。

类似于mysql中以下查询的内容:

SELECT id,image,name,featured FROM products WHERE featured = 'false'

但是在上面的graphql查询中,我无法查询featured = false。

我尝试过:

query MyQuery {
  products {
    edges {
      node {
        featured @include(if: false)
        id
        ... other field I need
        
      }
    }
  }
}

但是此查询的作用是,如果featured字段为true,则在结果中包括featured字段,否则不要在结果中包括该字段。这不是我想要的

我想要的是

如果产品的featured字段为true,则将products包含在结果中,否则,从结果中删除整个产品。

如何在上面的MyQuery中实现这一目标?

解决方法

@include@skip伪指令用于字段选择,而不是过滤。 GraphQL没有内置的过滤,排序或分页方式。每个服务都应通过公开适当的参数来实现这些功能。

在这种情况下,products可以公开名为filterisFeatured的参数,以增加按featured值过滤结果的功能。然后,字段的解析器应使用该参数值来确定要返回的正确值。

如果要编写客户端查询并使用未编写的架构,请查看API文档以确定products字段可用的参数。如果架构没有提供此功能,并且您没有办法更改它,那么作为客户端,您将没有太多选择。充其量,您可以在获取结果后自行处理过滤,但是如果您还使用分页,则会很麻烦。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...