当前位置: 首页 > 知识库问答 >
问题:

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

夏晋
2023-03-14

我一直试图通过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是我试图删除的项的实际ID。这个表的主键是cognitoId,我不明白为什么删除操作与模式不匹配。该表还有一个排序键或范围键(我不确定它是什么,因为文档非常模糊)。我一直在这里参考文档:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

共有2个答案

柴岳
2023-03-14

仅供参考,如果您提供了错误的密钥名称,也会发生这种情况,例如:

DeleteItemSpec itemSpec = new DeleteItemSpec().withPrimaryKey("#NOPENOTMYKEYLOL", "my_id", "sortKeyField", "sort_key_id");
DeleteItemOutcome outcome = table.deleteItem(itemSpec);
缪志新
2023-03-14

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

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);
 类似资料:
  • 我的任务:我必须从jsp视图中删除对表“testtable”的每一行操作。 后端MySQL:=我有两个表一个“userinfo”用于aurtherntication,另一个表“testtable”。 对于两个表连接,我使用了jsp中的隐藏字段输入,而不是使用外键关系。 在控制台打印中,我们可以在单击delete按钮后看到com.mysql.jdbc.jdbc4PreparedStatement@1

  • 问题内容: 我想从排序的链表{0 1 2 2 3 3 4 5}中删除重复项。 ` ` prev.setNext(tempHeader)在while循环内无法正常工作。理想情况下,当prev = 2且tempHeader = 3时,prev.next应该是data = 3的节点。 Printlist函数仅使用标题指针并打印列表。 节点定义如下。 问题答案: 循环已排序,因此您知道重复项将彼此相邻。如

  • 无法从外壳中删除集合, 集合可用并且我的 php 脚本正在访问它的东西(选择|更新) 但当我使用: 它给了我一个错误:

  • 我的服务器上安装了JDK 1.8.0_261和JDK 1.8.0_265。 当我从控制面板上卸载这两个JDK时,JDK 1.8.0_261的文件夹结构会自动从我的Java安装目录中删除,但对于JDK 1.8.0_265来说则是如此 我甚至重新启动了服务器,但仍然没有删除文件夹。我无法重新命名相同的名称。 目前我使用的是openJDK11,所有的注册表项 我怀疑某些服务仍在使用jdk8,我想从我的服

  • 当试图通过AWS Java SDK执行删除时,我得到了错误 我想知道时间戳的排序键是否导致了这个问题。是否需要指定>0以外的时间戳?

  • 我得到以下异常: 关于这个案子有什么建议吗?