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