【问题标题】:How to query list of objects with array as an argument in GraphQL如何在 GraphQL 中以数组作为参数查询对象列表
【发布时间】:2017-03-31 08:51:57
【问题描述】:

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

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

如何在 GraphQL 中实现这一点?

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    您绝对可以使用一组值进行查询!以下是查询本身的样子:

    {
      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]
      }
    }
    

    【讨论】:

    • 架构是什么样的?
    • 当使用查询变量而不是直接在查询中硬编码时,[1,2,3] 会是什么样子?
    • 用上面的参数化调整了我的答案!
    【解决方案2】:

    在我的用例中,我是这样做的:

    查询:

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

    输入:

    vehicleTypes: VehicleTypesInput
    

    然后像这样使用:

    Input VehicleTypesInput {
        name: [String]!
    }
    

    【讨论】:

      【解决方案3】:

      我只是这样做:

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

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

      query nameOfYourQuery($arrayOfID: [String]) {
        allEvents(filter: { id: { in: $arrayOfID: [String] } }) {
          nodes {
            name
          }
        }
      }
      
      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 2018-02-05
      • 2017-08-01
      • 2020-10-10
      • 2018-08-07
      • 1970-01-01
      • 2017-03-14
      • 2018-07-09
      相关资源
      最近更新 更多