DynamoDb update item only if new attribute is greater than existing one(仅当新属性大于现有属性时,DynamoDB才更新项)
本文介绍了仅当新属性大于现有属性时,DynamoDB才更新项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
仅当新项的日期晚于现有项时,我才更新DynamoDB中的项。目前,我正在查询现有项,在代码中进行比较,然后写入db。我想知道是否有办法让DynamoDB为我做检查。我研究过使用Expected,但它的比较运算符需要接受一个参数,这与目的不符,因为这意味着无论如何都必须查询现有项。我正在使用Java 8。
推荐答案
ConditionExpression
可用于检查条件并在条件满足时更新项目。这类似于SQL语句中的WHERE条件。区别在于:-
1)DynamoDB同时需要分区键和范围键才能更新项。非键属性条件可以在ConditionExpression中给出
2)DynamoDB一次只能更新一项。
条件表达式-(字符串)中必须满足的条件 条件更新成功的顺序。 预期-(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;
这篇关于仅当新属性大于现有属性时,DynamoDB才更新项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:仅当新属性大于现有属性时,DynamoDB才更新项
基础教程推荐
猜你喜欢
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01