如何在 GraphQL 中以数组作为参数查询对象列表

How to query list of objects with array as an argument in GraphQL

我正在尝试查询具有 ID 数组的对象列表。类似于以下 SQL 查询:

SELECT name FROM events WHERE id IN(1,2,3,...);

如何在 GraphQL 中实现这一点?

你绝对可以用一个值数组来查询!下面是查询本身的样子:

{
  events(containsId: [1,2,3]) {
    ...
  }
}

类型看起来像:

const eventsType = new GraphQLObjectType({
  name: 'events',
  type: // your type definition for events,
  args: {
    containsId: new GraphQLList(GraphQLID)
  },
  ...
});

如果你想参数化这个查询,下面是一个例子:

{
  query: `
    query events ($containsId: [Int]) {
      events(containsId: $containsId) {
        id
        name
      }
    }
  `,
  variables: {
    containsId: [1,2,3]
  }
}

在我的用例中,我做了:

查询:

vehicleTypes: { name: ["Small", "Minivan"] }

输入:

vehicleTypes: VehicleTypesInput

然后像这样使用:

Input VehicleTypesInput {
    name: [String]!
}

我就是这么做的:

query nameOfYourQuery {
  allEvents(filter: { id: { in: [1,2,3] } }) {
    nodes {
      name
    }
  }
}

如果数组是一个变量,那么它看起来像这样(至少在 Gatsby 中):

query nameOfYourQuery($arrayOfID: [String]) {
  allEvents(filter: { id: { in: $arrayOfID: [String] } }) {
    nodes {
      name
    }
  }
}