gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:59 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com