我有一个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;)
我的问题是:如何更正此代码,使其在到达主键时插入,在到达已存在的主键时更新,而无需额外读取以检查其是否存在?
答案 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是否在没有表达式的情况下在表上工作?