dynamodb条件表达式语法

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

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

  1. String mySecret = ...
  2. final Map<String, AttributeValue> key = new HashMap<String, AttributeValue>();
  3. key.put("account", AttributeValue.builder()
  4. .s(account).build());
  5. key.put("system", AttributeValue.builder()
  6. .s(system).build());
  7. DeleteItemRequest request = DeleteItemRequest.builder()
  8. .tableName(DYNAMODB_TABLE_NAME)
  9. .key(key)
  10. .build();

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

bksxznpy

bksxznpy1#

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

  1. {
  2. "TableName": "YOUR_TABLE",
  3. "Key": {
  4. "PK": "PARTITION_KEY",
  5. "SK": "SORT_KEY"
  6. },
  7. "ConditionExpression": "#secretKey = :secretValue",
  8. "ExpressionAttributeNames": {"#secretKey":"secret"},
  9. "ExpressionAttributeValues": {":secretValue": {"S":"mySecret"}}
  10. }

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

  1. Map<String, String> expressionAttributeNames = new HashMap<String, String>();
  2. expressionAttributeNames.put("#secretKey", "mySecret");
  3. Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();
  4. expressionAttributeValues.put(":secretValue", new AttributeValue("secret"));
  5. String conditionExpression = "#secretKey = :secretValue";
  6. deleteItemRequest.setConditionExpression(conditionExpression);
  7. deleteItemRequest.setExpressionAttributeNames(getExpressionAttributeNames());
  8. deleteItemRequest.setExpressionAttributeValues(getExpressionAttributeValues());

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

展开查看全部

相关问题