java - 仅当新属性大于现有属性时 DynamoDb 更新项目

标签 java amazon-web-services amazon-dynamodb

我只想更新 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/

相关文章:

java - 如果属性不等于 DynamoDBMapper,则有条件写入项目

amazon-dynamodb - Api网关获取item dynamodb配置

java - 并发修改异常,尽管等待完成

java - 使用 if 在父类(super class)型和子类型之间进行选择

amazon-web-services - 验证错误: The specified value for roleName is invalid

python - 如何根据主键归档DynamoDB记录

java - 如何多次重用一个线程?

java - 简单的Spring,独立应用程序使用Classpath ApplicationContext,如何重用?

python - 如何在AWS lambda (python)中上传zip文件夹而不存储在S3中

amazon-web-services - 如何减少我的 AWS EC2 实例与其他 AWS 客户的 REST API 之间的延迟