如何在 GraphQL 查询变量中使用数组
Posted
技术标签:
【中文标题】如何在 GraphQL 查询变量中使用数组【英文标题】:How to use an array inside a GraphQL Query Variable 【发布时间】:2020-01-22 19:24:46 【问题描述】:我想在 GraphQL 查询变量中使用一个数组,这样我就可以从 Gatsby 的单个查询中获取多个产品的数据,但是目前我遇到了错误。
我的 graphQL 查询如下所示:
query ($id: [String!])
shopifyProduct(handle: eq: $id)
handle
id
title
handle
productType
shopifyId
我的查询变量看起来像:
"id": ["liner-jacket", "pocket-t-shirt"]
期望的响应是(类似于):
"data":
"shopifyProduct":
"handle": "liner-jacket",
"id": "Shopify__Product__hopbjidjoqjndadnawdawda123123=",
"title": "Liner Jacket",
"productType": "jacket",
"shopifyId": "hopbjidjoqjndadnawdawda123123="
,
"shopifyProduct":
"handle": "pocket-t-shirt",
"id": "Shopify__Product__iajwdoiajdoadjwaowda4023123=",
"title": "Pocket T-Shirt",
"productType": "t-shirt",
"shopifyId": "iajwdoiajdoadjwaowda4023123="
【问题讨论】:
【参考方案1】:GraphQL 支持一种特殊的 List 类型,它表示特定类型的数组。例如,[String]
是 String
类型的列表。尽管 [String]
类型 wraps String
,但在 GraphQL 中,它被视为与 String
的独立、不同类型。换句话说,你不能在需要String
的地方使用[String]
,也不能在需要[String]
的地方使用String
。
参数(如 handle
)或输入对象字段(如 eq
)只有一个 GraphQL 类型。如果将变量用作参数的值,则其类型必须与该参数的类型匹配。看来eq
的类型为String!
(非空字符串),因此您只能传递一个String
,而不是列表。
是否存在基于值数组进行查询的方法取决于服务器实现。一些模式支持这样做的方法(例如,可能有一个接受列表的in
字段而不是eq
)。但是,这是特定于模式的。查看您正在使用的服务器/框架/库的文档,或使用可用的 GraphiQL 或 GraphQL Playground 界面探索架构。
【讨论】:
以上是关于如何在 GraphQL 查询变量中使用数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GraphQL (Relay) 中查询和改变数组类型?