仅当新属性大于现有属性时,DynamoDb 才会更新项目

2023-12-30

仅当新项目的日期比现有项目更新时,我才想更新 DynamoDB 中的项目。目前,我正在查询现有项目,在代码中进行比较,然后写入 db.我想知道是否有办法让 DynamoDB 为我进行检查。我研究过使用Expected http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Expected.html#gt-java.lang.Object-,但它的比较运算符需要接受一个参数,这违背了目的,因为这意味着无论如何都必须查询现有项目。

我正在使用 Java 8。


The ConditionExpression可用于检查条件并在满足条件时更新项目。这类似于SQL语句中的WHERE条件。差异是:-

1) DynamoDB 需要分区键和范围键来更新项目。非关键属性条件可以在ConditionExpression中给出

2) DynamoDB 一次只能更新一项。

ConditionExpression —(字符串)必须满足的条件 命令条件更新成功。

预期 — (map) 这是一个遗留参数,用于向后 兼容性。新应用程序应使用 ConditionExpression 反而。不要将遗留参数和表达式参数组合在一起 单个 API 调用;否则,DynamoDB 将返回 ValidationException异常。

示例代码:-

仅当现有值“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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅当新属性大于现有属性时,DynamoDb 才会更新项目 的相关文章

随机推荐