【问题标题】:Updating database only if key is already present仅当密钥已存在时才更新数据库
【发布时间】:2021-01-12 07:35:17
【问题描述】:

只有在 key 存在时我才必须更新 dynamodb,如果 key 不存在,我不想创建新行。

我的语法是:

PrimaryKey pk = new PrimaryKey("partitionKey", key1, "sortKey", key2);
String updateExpression = "set abc =:s";
String value = "xyz";

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
                .withPrimaryKey(pk)
                .withUpdateExpression(updateExpression)
                .withValueMap(new ValueMap().withString(":s", value))
                .withConditionExpression(?);
table.updateItem(updateItemSpec);

我应该在 withConditionExpression 中提供什么。如何在这里使用attribute_exist()?

【问题讨论】:

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


    【解决方案1】:

    如果新项目不存在,更新项目 API 将创建它。您可以使用 ConditionExpression 停止创建新项目。

    ConditionExpression = attribute_exists(partitionKey)
    

    如果未找到密钥,API 将抛出 ConditionalCheckFailedException。

    【讨论】:

    • 我将传递partitionKey 是属性名称还是key1 是值?如果我也想传递排序键?
    • 您需要传入 KEY 而不是 VALUE。如果要添加更多条件,可以将它们添加到与 partitionKey 太相似的 AND 布尔运算符。在这里查看更详细的解释 - stackoverflow.com/a/50750158/9774855
    • 建议尝试检查 DynamoDBMapper 功能。这提供了平稳运行。它将使用此映射器支持的 @DynamoDBVersionedAttribute 即时处理您的用例。
    • @Shaggy31,建议为此创建一个不同的问题,以便对社区有所帮助。而且,如果您的原始问题得到了回答,请接受它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多