图表QL |如何实现条件嵌套?

GraphQL | How to implement conditional nesting?

请考虑以下 GraphQL 模式:

type User {
   id: ID!
   events: [Event]
}

type Event {
   id: ID!
   user: User!
   asset: Asset!
}

type Asset {
  id: ID
  price: Number!
  name: String!
}

GraphQL 是一个用于获取嵌套对象的出色框架,但我很难理解条件嵌套是如何实现的。

示例:

我想检索特定 user 的所有 events,其中 asset.price 大于 x。

我想检索属于 users [].

列表的 asset 的所有 events

问题:条件嵌套是GraphQL中的一个概念吗?它是如何实现的?

旁注:我使用 AWS AppSync,解析器正在从 AWS DynamoDB 获取数据。

您可以在任何 GraphQL 查询上定义 filter/condition,例如:

query {
  users(permission: 'ADMIN') {
    ...
  }
}

permission 参数被传递给您的解析器(例如 DynamoDb VTL 模板、Lambda 等)以按您的意愿进行处理 - 对于 GQL 这只是另一个参数。

您可以通过创建 events 解析器将此概念带入嵌套字段,然后您可以这样称呼它:

query {
  user(id: '123') {
    name
    events(minPrice: 200) {
      nodes: {
        id
        eventName
        eventDate
      }
    }
    dob
    ...
   }
}

在上面的例子中,我使用了一个简单的 minPrice 参数,但您可以做更复杂的事情,例如价格范围,甚至传递运算符(eq、gt、...)。这一切都与 GraphQL 无关 - 都传递给解析器。

如何在后端实现取决于您的设置。我在没有 Amplify 的情况下使用 AppSync 并编写自己的 VTL 模板并使用提供的 GQL 字段构建 DynamoDb 请求。

是一个 SO post,展示了如何创建日期过滤器。