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

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

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

com.amazonaws.AmazonServiceException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: 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 是项目的实际 ID正在尝试删除。有问题的表将 cognitoId 作为主键,我不明白为什么删除与架构不匹配。该表还有一个排序键或范围键(我不确定它是什么,因为文档相当模糊)。我一直在这里引用文档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

最佳答案

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

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);

关于java - 无法从 DynamoDB 表中删除项目 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819663/

相关文章:

java - 获取 AWS CloudFront 失效使用情况(上个月)

amazon-web-services - Amazon S3 上的 Presto

javascript - 亚马逊购买需要 2 个用户登录

python - 上传到 S3 时 Lambda 函数超时

php - 转换 blob 图像并上传到 storage/s3 文件夹

java - 使用更少的定时器

java - 如何在此 ubuntu 终端命令 : "javac Main.java && java Main"? 中仅引用一次 Main

scala - Spark : Writing data frame to s3 bucket

java - Jackson 如何在不强制转换的情况下将 JsonNode 转换为 ArrayNode?

java - Android应用程序与rest api php codeigniter管理面板