无法从DynamoDB表中删除项目(java)

时间:2016-01-15 20:52:46

标签: java amazon-web-services amazon-s3 amazon-dynamodb

我一直试图通过java代码从DynamoDB中的表中删除一个项目,但是我所做的每一次尝试都会导致同样的错误:

  

com.amazonaws.AmazonServiceException:提供的关键元素   与架构不匹配(服务:AmazonDynamoDBv2;状态代码:400;   错误代码:ValidationException;

我目前的尝试很简单,看起来像这样:

final DynamoDB dynamoDB = new DynamoDB(new  AmazonDynamoDBClient(credentials));  

Table table =dynamoDB.getTable(tableName);    

DeleteItemSpec itemSpec = new  DeleteItemSpec().withPrimaryKey("cognitoId", cognitoId);  
table.deleteItem(itemSpec);

tablename 只是表格名称,凭据已经过验证是正确的, cognitoId 是项目I的实际ID我试图删除。有问题的表有cognitoId作为主键,我不明白为什么删除与架构不匹配。该表还有一个排序键或范围键(我不确定它是什么,因为文档非常模糊)。我一直在这里提到文档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

2 个答案:

答案 0 :(得分:2)

创建表时是否有排序键?如果是这样,那么你必须指定排序键,因为你在表上有一个复合键。使用排序键意味着您可以使用相同的主键创建多个记录,但排序键必须是唯一的

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

在AWS Dynamo DB文档和控制台中,排序键也可称为范围或范围键。

所以你的删除项目就像

DeleteItemSpec itemSpec = new DeleteItemSpec().withPrimaryKey("cognitoId", "my_id", "sortKeyField", "sort_key_id");
DeleteItemOutcome outcome = table.deleteItem(itemSpec);

答案 1 :(得分:0)

仅供参考,如果您提供了错误的密钥名称,例如:

DeleteItemSpec itemSpec = new DeleteItemSpec().withPrimaryKey("#NOPENOTMYKEYLOL", "my_id", "sortKeyField", "sort_key_id");
DeleteItemOutcome outcome = table.deleteItem(itemSpec);