Appsync 和 GraphQL:如何按嵌套值过滤列表
Appsync & GraphQL: how to filter a list by nested value
我有一个由 Amplify 从基本模式生成的 Appsync API。在 Article
模型中,category
字段嵌套在 metadata
字段中。我想构建一个查询,提供按类别过滤的文章列表。我不清楚如何过滤嵌套值...我已经看到 但类似的答案没有用。
AWS GraphQL 转换架构
type Article @model {
id: ID!
title: String!
description: String!
text: String!
metadata: ArticleMetadata!
}
type ArticleMetadata {
category: Category!
lastModified: String!
creationDate: String!
}
enum Category {
javascript
java
ruby
python
haskell
}
生成的列表查询
export const listArticles = `query ListArticles(
$filter: ModelArticleFilterInput
$limit: Int
$nextToken: String
) {
listArticles(filter: $filter, limit: $limit, nextToken: $nextToken) {
items {
id
title
description
text
metadata {
category
lastModified
creationDate
}
}
nextToken
}
}
`;
过滤器查询失败
query listArticlesByCategory($category: String!) {
listArticles(filter: {category: {eq: $category}}) {
items {
title
description
text
metadata {
category
creationDate
lastModified
}
}
}
}
Appsync 控制台错误指出 filter: {category: ... }
中的 category
是未知字段。
默认情况下,Amplify codegen 仅在顶级过滤器上运行。您可以扩展它以包括嵌套在 ArticleMetadata 中的属性的过滤器。
您需要扩充 ModelArticleFilterInput
类型以包含类别字段。假设文章 table 中的元数据字段由 DynamoDB 映射支持,您可以根据映射值进行过滤。您将需要修改 listArticles 解析器的请求映射模板 VTL,以在过滤器参数中有类别值时添加包含类似 metadata.category = :category
的过滤器表达式。
我有一个由 Amplify 从基本模式生成的 Appsync API。在 Article
模型中,category
字段嵌套在 metadata
字段中。我想构建一个查询,提供按类别过滤的文章列表。我不清楚如何过滤嵌套值...我已经看到
AWS GraphQL 转换架构
type Article @model {
id: ID!
title: String!
description: String!
text: String!
metadata: ArticleMetadata!
}
type ArticleMetadata {
category: Category!
lastModified: String!
creationDate: String!
}
enum Category {
javascript
java
ruby
python
haskell
}
生成的列表查询
export const listArticles = `query ListArticles(
$filter: ModelArticleFilterInput
$limit: Int
$nextToken: String
) {
listArticles(filter: $filter, limit: $limit, nextToken: $nextToken) {
items {
id
title
description
text
metadata {
category
lastModified
creationDate
}
}
nextToken
}
}
`;
过滤器查询失败
query listArticlesByCategory($category: String!) {
listArticles(filter: {category: {eq: $category}}) {
items {
title
description
text
metadata {
category
creationDate
lastModified
}
}
}
}
Appsync 控制台错误指出 filter: {category: ... }
中的 category
是未知字段。
默认情况下,Amplify codegen 仅在顶级过滤器上运行。您可以扩展它以包括嵌套在 ArticleMetadata 中的属性的过滤器。
您需要扩充 ModelArticleFilterInput
类型以包含类别字段。假设文章 table 中的元数据字段由 DynamoDB 映射支持,您可以根据映射值进行过滤。您将需要修改 listArticles 解析器的请求映射模板 VTL,以在过滤器参数中有类别值时添加包含类似 metadata.category = :category
的过滤器表达式。