【问题标题】:Appsync & GraphQL: how to filter a list by nested valueAppsync 和 GraphQL:如何按嵌套值过滤列表
【发布时间】:2019-08-03 14:13:16
【问题描述】:

我有一个由 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 控制台错误指出filter: {category: ... } 中的category 是未知字段。

【问题讨论】:

  • 看起来您正在生成由 DynamoDB 表支持的数据类型,该表没有可用的过滤器参数。尝试查看@searchable 指令
  • 它由 DynamoDB 支持,但 list 操作的自动生成代码包括 $filter: ModelArticleFilterInput。检查ModelArticleFilterInput 发现metadata 不包括在内。不知道为什么只能过滤顶级字段。

标签: graphql aws-appsync aws-amplify


【解决方案1】:

默认情况下,Amplify 代码生成只会在顶级过滤器上运行。您可以扩展它以包含嵌套在 ArticleMetadata 中的属性的过滤器。

您需要扩充ModelArticleFilterInput 类型以包含类别字段。假设文章表中的元数据字段由 DynamoDB 映射支持,您可以根据映射值进行过滤。您需要修改 listArticles 解析器的请求映射模板 VTL,以添加包含类似 metadata.category = :category 的过滤器表达式,当过滤器参数中有类别值时。

【讨论】:

  • 我没有机会亲自验证这一点,但这符合我对 Appsync 解析器和 Amplify 生成的代码的理解。
  • @Aaron_H 你能举个例子吗?
  • @aaron-h 你能举个例子吗? github.com/aws-amplify/amplify-cli/issues/6467
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 2023-02-11
  • 2021-08-13
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多