我只想更新 DynamoDB 中的项目,前提是新项目的日期比现有项目的日期更新。目前,我正在查询现有项目,在我的代码中进行比较,然后写入数据库。我想知道是否有办法让 DynamoDB 为我进行检查。我研究过使用 Expected , 但它的比较运算符需要接受一个参数,这违背了目的,因为这意味着无论如何都必须查询现有项目。
我正在使用 Java 8。
最佳答案
ConditionExpression
可用于检查条件并在满足条件时更新项目。这类似于 SQL 语句中的 WHERE 条件。不同之处在于:-
1) DynamoDB 需要分区键和范围键来更新项目。非关键属性条件可以在ConditionExpression中给出
2) DynamoDB 一次只能更新一项。
ConditionExpression — (String) A condition that must be satisfied in order for a conditional update to succeed.
Expected — (map) This is a legacy parameter, for backward compatibility. New applications should use ConditionExpression instead. Do not combine legacy parameters and expression parameters in a single API call; otherwise, DynamoDB will return a ValidationException exception.
示例代码:-
以下代码仅在现有值“createdate”属性小于新值时更新项目(换句话说,新值大于表中的现有值)。
UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("yearkey", yearKey, "title", title)
.withReturnValues(ReturnValue.UPDATED_NEW).withUpdateExpression("set #createdate = :val1")
.withNameMap(new NameMap().with("#createdate", "createdate"))
.withValueMap(new ValueMap().withString(":val1", createDate))
.withConditionExpression("createdate < :val1");
UpdateItemOutcome outcome = null;
try {
outcome = table.updateItem(updateItemSpec);
} catch (ConditionalCheckFailedException ce) {
System.out.println("Conditional check failed." + ce.getMessage());
return false;
}
return true;
关于java - 仅当新属性大于现有属性时 DynamoDb 更新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40186283/