有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于GSI的java更新Dynamo DB列

我创建了一个表测试,它有4列:

第1列:范围键

第2列:排序键

专栏3:GSI

第4列:法线属性

现在我想根据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的列


共 (1) 个答案

  1. # 1 楼答案

    GSI用于查询数据,因此要做到这一点,您需要首先使用GSI查询数据,然后使用该查询的结果,使用响应中的键知道要更新哪些记录。请记住,使用GSI可能是记录,复数。无法保证唯一性