【问题标题】:Deleting Attribute in DynamoDB在 DynamoDB 中删除属性
【发布时间】:2012-02-04 15:48:06
【问题描述】:

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

线程“主”状态代码中的异常:400,AWS 服务:AmazonDynamoDB,AWS 请求 ID:09MRO4PVTJ8IK6OHLKSM551REJVV4KQNSO5AEMVJF66Q9ASUAAJG,AWS 错误代码:ValidationException,AWS 错误消息:一个或多个参数值无效:操作 DELETE 不支持N型 在 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 中找不到合适的方法。

我们将不胜感激。

【问题讨论】:

  • 你能发布实际的异常
  • @Layble:很高兴您自己解决了这个问题 - 您能否将您的解决方案发布为答案并接受它?跟进您自己的问题是完全合理和理想的,只要它首先是一个真正的悬而未决的问题。谢谢:)

标签: java nosql amazon-dynamodb


【解决方案1】:

我可以发誓我已经尝试过了,但是通过将 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);

【讨论】:

    【解决方案2】:

    这也有效。

    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 - 从项目中删除一个或多个属性。

    【讨论】:

      【解决方案3】:

      在更新表项时从 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

      【讨论】:

        猜你喜欢
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多