如何为 dynamodb 表中较早的项目设置新属性的默认值?

RJN*_*WLY 9 java amazon-web-services amazon-dynamodb

我有一个仅包含哈希键的表,现在用例需要创建一个以creationDate 作为范围键的GSI。

我通过在所有新项目中将creationDate 值指定为数字来实现此目的。

但是该表已经有大约 5000 个条目没有为creationDate 设置值,并且这些条目不包含在 GSI 上的扫描或查询操作的结果中。作为此问题的解决方案,我想对当前没有 createDate 值的所有条目使用默认值。如何在 Java 中使用 dynamodbmapper 来执行此操作,或者有没有办法使用 AWS 控制台来执行此操作?

not*_*est 3

现有项目必须单独更新。

  • DynamoDB API 不允许使用UpdateItemSpecDynamoDBMapper更新没有哈希键值的项目
  • 当使用UpdateTableSpec类将新属性添加到表中时,DynamoDB 没有默认某些值的功能

如果给定哈希键的属性不存在,则更新项目:-

如果该属性已存在,则以下示例不执行任何操作;否则,它将属性设置为默认值。

    UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("orderId", "75246c41-02c7-48c4-8d4c-d202483e6d2b")
            .withReturnValues(ReturnValue.ALL_NEW).withUpdateExpression("set #createDate = if_not_exists (#createDate, :val1)")
            .withNameMap(new NameMap().with("#createDate", "createDate"))
            .withValueMap(new ValueMap().withNumber(":val1", 1));

    UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
Run Code Online (Sandbox Code Playgroud)