我有一个由Amplify从基本模式生成的Appsync API。在Article
模型上,category
字段嵌套在metadata
字段中。我想构建一个查询,该查询提供按类别过滤的文章列表。对我来说,目前尚不清楚如何根据嵌套值进行过滤...我已经看到similar questions,但类似的答案却没有用。
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控制台错误指出category
中的filter: {category: ... }
是未知字段。
答案 0 :(得分:1)
默认情况下,Amplify码源仅在顶级过滤器上运行。您可以扩展它以包括对嵌套在ArticleMetadata中的属性的过滤器。
您将需要增加ModelArticleFilterInput
类型以包括类别字段。假设商品表中的元数据字段由DynamoDB地图支持,则可以基于地图值进行过滤。当filter参数中有类别值时,您将需要修改listArticles解析器的“请求映射模板” VTL以添加包含类似metadata.category = :category
之类的过滤器表达式。