如何在 GraphQL 查询变量中使用数组

Far*_*eal 8 graphql graphql-js gatsby

我想在 GraphQL 查询变量中使用数组,以便我可以通过 Gatsby 的单个查询获取多个产品的数据,但目前我收到错误。

我的 graphQL 查询如下所示:

query ($id: [String!]) {
  shopifyProduct(handle: {eq: $id}) {
    handle
    id
    title
    handle
    productType
    shopifyId
  }
}
Run Code Online (Sandbox Code Playgroud)

我的查询变量如下所示:

{
  "id": ["liner-jacket", "pocket-t-shirt"]
}
Run Code Online (Sandbox Code Playgroud)

所需的响应将是(类似于):

{
  "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="
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 12

GraphQL 支持一种特殊的 List 类型,它表示特定类型的数组。例如,[String]是 类型的列表String。尽管[String]类型是换行的 String,但在 GraphQL 中它被认为是一种独立的不同的类型String。换句话说,你不能使用[String]where Stringis Expected,也不能使用Stringwhere [String]is Expected。

参数(如handle)或输入对象字段(如eq)仅具有单一 GraphQL 类型。如果变量用作参数的值,则其类型必须与该参数的类型匹配。它似乎eq具有类型String!(非空字符串),因此您只能向其传递单个String而不是列表。

是否存在基于值数组进行查询的方法取决于服务器实现。某些模式支持一种方法来执行此操作(例如,eq可能有一个in接受列表的字段,而不是 )。然而,这是特定于模式的。查看您正在使用的服务器/框架/库的文档,或使用可用的 GraphiQL 或 GraphQL Playground 界面探索架构。