我一直试图通过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
答案 0 :(得分:2)
创建表时是否有排序键?如果是这样,那么你必须指定排序键,因为你在表上有一个复合键。使用排序键意味着您可以使用相同的主键创建多个记录,但排序键必须是唯一的
在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);