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

How to use an array inside a GraphQL Query Variable

我想在 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="
    }
  }
}

GraphQL 支持表示特定类型数组的特殊列表类型。例如,[String]String 类型的列表。即使 [String] 类型 wraps String,在 GraphQL 中它被认为是 separatedistinct 输入 String。换句话说,您不能在需要 String 的地方使用 [String],也不能在需要 [String] 的地方使用 String

一个参数(如 handle)或输入对象字段(如 eq)只有一个 GraphQL 类型。如果变量用作参数的值,则其类型必须与该参数的类型相匹配。看起来 eq 的类型是 String!(一个非空字符串),所以你只能传递一个 String,而不是一个列表。

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