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

Graphql- How to fetch result based on the condition of a field?

我有一个如下所示的查询:

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

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

类似于下面 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 字段为真,则在结果中包含 featured 字段,否则不包含 result.This 中的字段是不是我想要的

我要的是,

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

如何在上面的 MyQuery 中实现这个?

@include@skip 指令用于字段选择,而不是过滤。 GraphQL 没有 built-in 过滤、排序或分页的方法。通过公开适当的参数来实现这些功能取决于每个单独的服务。

在这种情况下,products 可以公开一个名为 filterisFeatured 的参数,以添加按 featured 值过滤结果的能力。然后该字段的解析器应使用该参数值来确定 return.

的正确值

如果您正在编写客户端查询并使用您未编写的架构,请检查您的 API 文档以确定哪些参数可用于 products 字段。如果模式不公开此功能并且您没有办法更改它,那么作为客户端,您没有太多选择。充其量你可以在fetch出来后自己过滤,但是如果你还要分页的话就麻烦了。