DynamoDB-Java如果存在则写入更新,否则

时间:2017-08-13 14:21:19

标签: java database amazon-dynamodb

我有一个DynamoDB,并希望尝试更新一些条目并插入不存在的条目。我目前的代码如下所示:

updateItemSpec = new UpdateItemSpec()
                .withPrimaryKey(ITable.ID,
                 request.getID().getValue())
                .withUpdateExpression(updatedExpressionSetString)
                .withNameMap(nameMap)
                .withValueMap(valueMap)
try {
        table.updateItem(updateItemSpec);
}

updateExpression是:

SET supply.#var0 = 
if_not_exists(supply.#var0,:default) + :val0,
date = :dateVal

这一切都很有效,直到到达主键尚不存在的条目。发生这种情况时,此代码会抛出异常:

更新表达式中提供的文档路径对于更新无效(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;)

我的问题是:如何更正此代码,使其在到达主键时插入,在到达已存在的主键时更新,而无需额外读取以检查其是否存在?

1 个答案:

答案 0 :(得分:0)

我不记得PK是强制性的。它是。来自java docs:

  

if_not_exists(path,operand) - 如果项目不包含   在指定路径的属性,然后if_not_exists计算结果   操作数;否则,它评估路径。您可以使用此功能   避免覆盖可能已存在的属性   项目

但是这个

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.UpdateData.html

声明这是可能的。

该值似乎不是PK。 upsert是否在没有表达式的情况下在表上工作?