DynamoDbでアイテムを更新しようとしています。更新の条件は、入力文字列(myValue
)が文字列セット(mySet
)に存在しないようにすることです。抽象的なコードは次のとおりです。DynamoDb条件式にcontains()関数の文字列セットが常にFalseと評価される
Map<String, Object> valueMap = new ValueMap().withStringSet(":val", "myValue");
String updateExpression = "add mySet :val ";
String conditionExpression = "not(contains(mySet, :val))";
UpdateItemSpec updateItemSpec =
new UpdateItemSpec().withReturnValues(ReturnValue.NONE)
.withPrimaryKey("HashKey", "h1")
.withUpdateExpression(updateExpression).withValueMap(valueMap)
.withConditionExpression(conditionExpression);
try {
myTable.updateItem(updateItemSpec);
} catch (ConditionalCheckFailedException ccfe) {
System.out.println("success");
}
このアイテムは既にdb内にあります。さて、mySet
にmyValue
が存在しても、条件式は常に真と評価され、ConditionalCheckFailedException
には至りません。 contains()関数を使用している方法に何か問題がありますか?
文献:DynamoDb ConditionExpression Functions
条件式に関係なく、アイテムが正しく追加されていますか? –
はい、アイテムが正しくセットに追加されます。 – Raghav