2012-02-04 95 views
5

我试图找出从Dynamo DB中的项中删除属性的最佳方法。下面是我试过,但我得到一个异常说,DELETE是不是一个支持线程“主”状态代码为N型或S删除DynamoDB中的属性

例外:400,AWS服务:AmazonDynamoDB,AWS请求ID :09MRO4PVTJ8IK6OHLKSM551REJVV4KQNSO5AEMVJF66Q9ASUAAJG,AWS错误代码:ValidationException,AWS错误消息:一个或多个参数值无效:动作DELETE不支持在com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:544)的N型 在com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:284) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:169) at> com.amazonaws.services.dynamodb.AmazonDynamoDBCl ient.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中执行此操作的适当方法。

帮助将不胜感激。

+1

您能否发布实际例外 – 2012-02-04 16:21:34

+0

@Layble:很高兴您设法自己解决这个问题 - 您能否将您的解决方案发布为答案并接受它?遵循自己的问题是非常合理和理想的,只要它首先是一个真正开放的问题。谢谢:) – 2012-02-06 11:53:19

回答

9

我可以发誓我已经尝试过这一点,但与它的工作原理空值替换的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); 
+0

+1跟进您的解决方案,谢谢! – 2012-02-26 13:15:47

3

这也适用。

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

you can even use Expressions在项目更新中。

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