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
可以公开一个名为 filter
或 isFeatured
的参数,以添加按 featured
值过滤结果的能力。然后该字段的解析器应使用该参数值来确定 return.
的正确值
如果您正在编写客户端查询并使用您未编写的架构,请检查您的 API 文档以确定哪些参数可用于 products
字段。如果模式不公开此功能并且您没有办法更改它,那么作为客户端,您没有太多选择。充其量你可以在fetch出来后自己过滤,但是如果你还要分页的话就麻烦了。
我有一个如下所示的查询:
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
可以公开一个名为 filter
或 isFeatured
的参数,以添加按 featured
值过滤结果的能力。然后该字段的解析器应使用该参数值来确定 return.
如果您正在编写客户端查询并使用您未编写的架构,请检查您的 API 文档以确定哪些参数可用于 products
字段。如果模式不公开此功能并且您没有办法更改它,那么作为客户端,您没有太多选择。充其量你可以在fetch出来后自己过滤,但是如果你还要分页的话就麻烦了。