图表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,展示了如何创建日期过滤器。
请考虑以下 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 请求。