本文介紹了僅當新屬性大于現(xiàn)有屬性時,DynamoDB才更新項的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
僅當新項的日期晚于現(xiàn)有項時,我才更新DynamoDB中的項。目前,我正在查詢現(xiàn)有項,在代碼中進行比較,然后寫入db。我想知道是否有辦法讓DynamoDB為我做檢查。我研究過使用Expected,但它的比較運算符需要接受一個參數(shù),這與目的不符,因為這意味著無論如何都必須查詢現(xiàn)有項。
我正在使用Java 8。
推薦答案
ConditionExpression
可用于檢查條件并在條件滿足時更新項目。這類似于SQL語句中的WHERE條件。區(qū)別在于:-
1)DynamoDB同時需要分區(qū)鍵和范圍鍵才能更新項。非鍵屬性條件可以在ConditionExpression中給出
2)DynamoDB一次只能更新一項。
條件表達式-(字符串)中必須滿足的條件
條件更新成功的順序。預(yù)期-(Map)這是一個舊參數(shù),用于向后
兼容性。新應(yīng)用程序應(yīng)使用ConditionExpression
取而代之的是。不要在中組合傳統(tǒng)參數(shù)和表達式參數(shù)
單個API調(diào)用;否則,DynamoDB將返回
ValidationException異常。
示例代碼:-
僅當現(xiàn)有值”createdate”屬性小于新值(即新值大于表中的現(xiàn)有值)時,下面的代碼才更新該項。
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;
這篇關(guān)于僅當新屬性大于現(xiàn)有屬性時,DynamoDB才更新項的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,