我对 DynamoDb 相当陌生。我必须使用 id 分区键和 number 排序键来更新表中名为 status 和 ModifiedTime 的属性。我下面的代码抛出了
提供的关键元素与架构异常不匹配。有人可以帮我找到我在这里缺少的东西吗?
public static UpdateItemSpec updateData(String id, int number, String status, long modifiedTime) {
String partitionKey = "id";
String statusAttribute = "status";
String modifiedTimeAttribute = "modifiedTime";
String numberAttribute = "number";
String expressionAttributeForStatus = "#s";
String expressionAttributeForModifiedTime = "#m";
String expressionAttributeForNumber = "#b";
return new UpdateItemSpec()
.withPrimaryKey(new PrimaryKey(partitionKey, id))
.withConditionExpression("#b = :Num")
.withUpdateExpression("SET " + expressionAttributeForStatus + " = :newStatus, " +
expressionAttributeForModifiedTime + " = :newModifiedTime")
.withNameMap(new NameMap()
.with(expressionAttributeForStatus, statusAttribute)
.with(expressionAttributeForModifiedTime, modifiedTimeAttribute)
.with(expressionAttributeForNumber, numberAttribute))
.withValueMap(new ValueMap()
.with(":newStatus", status)
.with(":newModifiedTime", modifiedTime)
.with(":Num", number))
.withReturnValues(ReturnValue.UPDATED_NEW);
}
主键采用以下参数:
PrimaryKey(String hashKeyName, Object hashKeyValue, String rangeKeyName, Object rangeKeyValue)
在您的情况下,您不会传入完整的主键,它应该包含您的分区和排序键。