9

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

线程“主”状态代码中的异常: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 中找不到合适的方法来执行此操作。

帮助将不胜感激。

4

3 回答 3

12

我可以发誓我已经尝试过了,但是通过将 AttributeValue 替换为 null 值,它可以工作:

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);
于 2012-02-07T19:49:46.483 回答
8

这也有效。

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

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

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

于 2015-09-14T13:36:55.290 回答
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")));

在上面的示例中,首先我privileges从 Item 中删除,然后 description在 Item 中更新。

于 2018-05-17T10:34:37.073 回答