如果值不存在则更新或检查DynamoDBMapper中的条件

时间:2017-09-29 21:44:42

标签: java amazon-web-services amazon-dynamodb

我正在研究一种保存到DynamoDB的方法。如果表中没有值,我希望方法保存。如果确实存在,我想应用条件更新。我正在使用DynamoDBMapper的保存方法。

我目前的代码成功完成了条件保存,但如果数据库中没有该列,则抛出异常。

有没有办法提出一个条件更新表达式来检查该值是否存在或检查我需要的条件?

目前我用Java编写的代码如下所示:

DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
AttributeValue attributeValue = new AttributeValue(valueToSave);
ExpectedAttributeValue expectedAttributeValue = new ExpectedAttributeValue(attributeValue).withComparisonOperator(ComparisonOperator.LT);
Map<String, ExpectedAttributeValue> expected = new HashMap<>();
expected.put("key", expectedAttributeValue);
saveExpression.setExpected(expected);
dynamoDbMapper.save(objectToSave);

谢谢!

1 个答案:

答案 0 :(得分:1)

Legacy应用程序(https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html#DDB-PutItem-request-Expected)中有ExpectedAttribute内容。

建议您改用较新的ConditionExpression。

这是我做到的一种方法,尽管下面的代码段是从Scala代码转换而来的,未经测试。

Map attrVals = new HashMap() {{
  put(":revision", new AttributeValue().withN(revision.toString)));   
}};

PutItemRequest request = new PutItemRequest().withTableName(myTableName)
.withItem(myItem)
.withConditionExpression(attribute_not_exists(primaryKey) OR revision <= :revision)
.withExpressionAttributeValues(attrVals);

dynamoClient.putItem(request);