首页 > 解决方案 > 如何使用 AWS Amplify 回填新的 AppSync 字段

问题描述

我正在使用 GraphQL 向我的一个 AppSync 表中添加一个排序字段。新架构如下所示:

type MyTable
  @model
  @auth(rules: [{allow: owner}])
  @key(name: "BySortOrder", fields: ["sortOrder"], queryField: "tableBySortOrder")
{
  id: ID!
  name: String!
  sortOrder: Int
}

但是,当使用检索列表时,tableBySortOrder我得到一个空列表,因为新字段sortOrder为空。

我的问题是,我如何将这些数据回填到 DynamoDB 表中,这样我的现有用户才不会被这个新变化所干扰?使用传统数据库,我会运行 SQL 更新:UPDATE MyTable SET sortOrder = #.

但是,我是 NoSQL/AWS 的新手,除了每当用户登录我的应用程序时构建一个回填脚本之外,我找不到这样做的方法。感觉很hacky。处理这种情况的最佳做法是什么?

标签: amazon-dynamodbaws-amplifyaws-appsyncdynamodb-queries

解决方案


您是否已经在 DDB 中创建了新字段?如果是,我认为您应该在进行客户端更改之前回填它。

编写一个脚本来迭代和更新表。选项:

  • Java - 如果您正在运行任何集成测试,请调用 updateItem 以更新表。
  • Bash - 使用 AWS CLI:aws dynamodb scan --table-name item_attributes --projection-expression "whatever" > /tmp/item_attributes_table.txt然后aws dynamodb update-item --table-name item_attributes --key. 这是一种肮脏的方式。
  • Python - 与上述相同的逻辑。

推荐阅读