dynamodb条件表达式语法

rn0zuynd  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(371)

我正在想办法有条件地删除一个项目。假设一个具有属性的表 (account, system, secret) . 假设我有以下代码:

String mySecret = ...
final Map<String, AttributeValue> key = new HashMap<String, AttributeValue>();
key.put("account", AttributeValue.builder()
    .s(account).build());
key.put("system", AttributeValue.builder()
    .s(system).build());

DeleteItemRequest request = DeleteItemRequest.builder()
    .tableName(DYNAMODB_TABLE_NAME)
    .key(key)
    .build();

我想要这个 DeleteItemRequest 只有当成功的价值 mySecret 匹配属性的值 secret 要删除的行的。如何在 DeleteItemRequest ?

bksxznpy

bksxznpy1#

您的请求参数应该如下所示(在伪代码中):

{
    "TableName": "YOUR_TABLE",
    "Key": {
        "PK": "PARTITION_KEY", 
         "SK": "SORT_KEY"
    },
    "ConditionExpression": "#secretKey = :secretValue",
    "ExpressionAttributeNames": {"#secretKey":"secret"},
    "ExpressionAttributeValues": {":secretValue": {"S":"mySecret"}}
}

我相信你错过了一次机会 ConditionExpressionDeleteItemRequest . 应该是这样的。我没有使用java来处理ddb,所以可能有更好的方法,但是。。。

Map<String, String> expressionAttributeNames = new HashMap<String, String>(); 
        expressionAttributeNames.put("#secretKey", "mySecret");

        Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>(); 
        expressionAttributeValues.put(":secretValue", new AttributeValue("secret"));

        String conditionExpression = "#secretKey = :secretValue";
        deleteItemRequest.setConditionExpression(conditionExpression);
        deleteItemRequest.setExpressionAttributeNames(getExpressionAttributeNames());
        deleteItemRequest.setExpressionAttributeValues(getExpressionAttributeValues());

哦,记住这一点 system 是ddb中的保留字。

相关问题