我创建了一个表TEST,其中包含4列:

column1:范围键

column2:排序键

第三栏:GSI

column4:普通属性

现在,我想基于GSI值更新column4的值。我尝试使用以下代码,但仅当我同时通过range和sort键时,它才有效。在更新时的用例中,我只有GSI的值,而没有range / sort键。

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的列?

最佳答案

GSI用于查询数据,因此,您需要先使用GSI查询数据,然后使用响应中的键使用GSI的结果来知道要更新的记录。请记住,使用GSI可能会记录复数形式。不能保证唯一性。

10-06 05:51