0

我创建了一个包含 4 列的表 TEST:

column1:范围键

column2:排序键

第 3 列:GSI

column4:普通属性

现在我想根据 GSI 值更新 column4 的值。我尝试使用以下代码,但它仅在我同时传递范围和排序键时才有效。在我更新时的用例中,我只有 GSI 的值而不是范围/排序键。

Map<String, AttributeValue> key = new HashMap<>();
key.put(“column1”, new AttributeValue().withS(column1Value));
key.put(“column2”, new AttributeValue().withS(column2Value));
Map<String, AttributeValue> attributeValues = new HashMap<>();

attributeValues.put(“column4”, new AttributeValue().withS(column4Value));
attributeValues.put(“column3”, new AttributeValue().withS(column3Value));

UpdateItemRequest updateItemRequest = new UpdateItemRequest()
                .withTableName(emailsTableName)
                .withKey(key)
                .withUpdateExpression(“set column4 = :column4”)
                .withConditionExpression(“column3 = :column3”)
                .withExpressionAttributeValues(attributeValues);
UpdateItemResult updateItemResult = dynamoDBClient.updateItem(updateItemRequest);

这是否可以仅基于 GSI 更新 Dynamo DB 列?

4

1 回答 1

4

GSI 用于查询数据,因此要执行此操作,您需要首先使用 GSI 查询数据,然后使用其中的结果使用响应中的键来了解要更新的记录。请记住,对于 GSI,它可能是记录,复数。无法保证唯一性。

于 2020-02-04T18:34:44.740 回答