DynamoDb Java API - 如果计数器增量不存在则插入

时间:2016-12-08 14:44:18

标签: amazon-dynamodb

我试图插入项目,如果它不存在并将其计数器设置为1或在计数器存在时将计数器加1,但它似乎不起作用...

这是我到目前为止所做的:

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
        .withPrimaryKey("Id", Id)
        .withReturnValues(ReturnValue.ALL_NEW)
        .withUpdateExpression("set #c = if_not_exists(#c = :val, #c + :val)")
        .withNameMap(new NameMap()
            .with("#c", "counter"))
        .withValueMap(new ValueMap()
            .withNumber(":val", 1));

当我更改更新表达式以设置#c = #c +:val时,它会更新现有项目,但如果它不存在则不会插入新项目。

设置#c =:val似乎既可以存在又不存在,但这不是我需要的。

1 个答案:

答案 0 :(得分:3)

您可以使用一个UpdateItem调用创建和更新项目。 UpdateExpression将为ADD #c :val,因为DynamoDB假装数字的值在ADD操作中对于尚不存在的项目为零。