【问题标题】:DynamoDB GSI based queries using Amplify Libraries使用 Amplify 库的基于 DynamoDB GSI 的查询
【发布时间】:2020-09-20 03:36:11
【问题描述】:

对于 Android 应用程序,我曾经在使用 GSI 时使用 AppSync 客户端从 DynamoDB 中查询数据。如今,我正在尝试使用 Amplify Libraries 来利用 DataStore 功能。阅读文档和代码后,我意识到 Amplify 库不支持此类查询,除非我弄错了。到目前为止,我发现的唯一方法是使用列表并对结果应用过滤器,但考虑到读取容量,这并不理想。有人找到有关此问题的文件吗?在这种情况下可以使用任何有用的插件吗?

有关说明,请参阅 AWS 文档中的以下架构:

type Item @model
  @key(fields: ["orderId", "status", "createdAt"])
  @key(name: "ByStatus", fields: ["status", "createdAt"], queryField: "itemsByStatus") {
  orderId: ID!
  status: Status!
  createdAt: AWSDateTime!
  name: String!
}

enum Status {
  DELIVERED
  IN_TRANSIT
  PENDING
  UNKNOWN
}

使用 AppSync,您可以通过这种方式根据 ByStatus GSI 查询数据:

appSyncClient.query(itemsByStatusQuery.builder().build())

现在,我正在使用 Amplify API 类别。在我看来,我只能使用getItemlistItems 查询。

我想知道是否有办法对 Amplify 库做同样的事情。

【问题讨论】:

    标签: android graphql aws-amplify aws-appsync dynamodb-queries


    【解决方案1】:

    感谢您的澄清。不幸的是,该特定功能尚未在 Amplify 中实现。它在我们团队的雷达上,但我们现在没有预计到达时间。随时open an issue,如果您有兴趣,可以跟踪进度。

    因为听起来您已经配置了 API 和 DataStore 类别,所以值得一提的是,您应该能够通过使用 Amplify.DataStore.query 并传入条件来获得等效的数据集(请参阅我之前回复中的链接) . Amplify 有一个同步过程,可以使本地 DataStore 与 API(在本例中为 DynamoDb)保持同步。如果这听起来像是一个合适的解决方法,请查看同步过程中的details

    【讨论】:

      【解决方案2】:

      就文档而言,您可以找到有关查询 DataStore here 的信息。如果您也在使用 API 类别,您可以找到查询文档here

      需要注意的重要一点是,GSI 是根据您的 GraphQL 模型创建/使用的。 connection 指令将根据架构中模型之间的关系为您生成 GSI。之后,您可以使用生成的模型来发出查询,而无需显式指定 GSI。

      如果您对此还有其他问题,我们很乐意为您提供帮助。

      【讨论】:

      • Raf,感谢您的回答,我提供了更多详细信息来澄清我的问题。我在阅读了您共享的相同文档后提出了这个问题。
      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多