删除 DynamoDB 中的属性

问题描述 投票:0回答:3

我正在尝试找出从 Dynamo DB 中的项目中删除属性的最佳方法。下面是我尝试过的,但我收到一个异常,说类型 N 或 S 都不支持 DELETE。

线程“main”中出现异常状态代码:400、AWS 服务:AmazonDynamoDB、AWS 请求 ID:09MRO4PVTJ8IK6OHLKSM551REJVV4KQNSO5AEMVJF66Q9ASUAAJG、AWS 错误代码:ValidationException、AWS 错误消息:一个或多个参数值无效:类型 N 不支持操作 DELETE 在 com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:544) 在 com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:284) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:169) 在 >com.amazonaws.services.dynamodb.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:675) 在 >com.amazonaws.services.dynamodb.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:371)

Key pk = new Key(new AttributeValue().withN(Long.toString(123)));
AttributeValueUpdate avu = new AttributeValueUpdate(new AttributeValue().withN("555"), "DELETE");
Map<String, AttributeValueUpdate> m = new HashMap<String, AttributeValueUpdate>();
m.put(String.valueOf(555), avu);
UpdateItemRequest uir = new UpdateItemRequest("users", pk, m);
dynamoDB.updateItem(uir);

令人困惑的一点是为什么属性值对于删除很重要。我确实想删除属性名称和任何关联的值,但在 SDK 中找不到合适的方法来执行此操作。

如有帮助,我们将不胜感激。

java nosql amazon-dynamodb
3个回答
14
投票

我可以发誓我已经尝试过这个,但是通过用空值替换 AttributeValue 它可以工作:

Key pk = new Key(new AttributeValue().withN(Long.toString(123)));
AttributeValueUpdate avu = new AttributeValueUpdate(null, "DELETE");
Map<String, AttributeValueUpdate> m = new HashMap<String, AttributeValueUpdate>();
m.put(String.valueOf(555), avu);
UpdateItemRequest uir = new UpdateItemRequest("users", pk, m);
dynamoDB.updateItem(uir);

对于科特林:

dynamoDB.updateItem( UpdateItemRequest(
    "users", 
    Key(AttributeValue().withN(123L.toString()), 
    mapOf("555" to AttributeValueUpdate(null, "DELETE"))
))

9
投票

这也有效。

Table table = dynamoDB.getTable("users");
table.updateItem(
    new PrimaryKey("<MY HASH KEY NAME>", <MY HASH VALUE>), 
    new AttributeUpdate("columnToRemove").delete()
);

或者 您甚至可以在项目更新中使用表达式

REMOVE - 从项目中删除一个或多个属性。


0
投票

在更新表的项目时从 Dynamo DB 删除属性

 UpdateItemRequest updateItemRequest =new UpdateItemRequest().withTableName(tableName).withKey(key);
 updateItemRequest.addAttributeUpdatesEntry("privileges",new AttributeValueUpdate()
          .withAction(AttributeAction.DELETE));

updateItemRequest.addAttributeUpdatesEntry("description", new AttributeValueUpdate()
          .withValue(new AttributeValue().withS("description")));

在上面的示例中,首先我从 Item 中删除了

privileges
,然后更新了 Item 中的
description

© www.soinside.com 2019 - 2024. All rights reserved.