DynamoDb:删除具有相同哈希键的所有项目

Han*_*ans 11 .net c# java amazon-web-services amazon-dynamodb

请考虑下表:

Table (documentId : Hash Key, userId: Range Key)
Run Code Online (Sandbox Code Playgroud)

如何编写代码以删除具有相同项目的所有项目documentId,最好不检索项目.

Har*_*ara 15

目前,你不能仅仅通过将哈希键删除所有项目,将其删除,需要哈希+的范围,因为那是什么使得它独特的项目.

You have to know both your (hash + range) to delete the item. 
Run Code Online (Sandbox Code Playgroud)

编辑:以下是DynamoDB文档的参考链接http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html#API_DeleteItem_RequestSyntax

请阅读"KEY"的说明,清楚地说我们必须通过Hash(分区键)和Range(排序键)来删除项目.

  • 那么DDB有什么可以做的吗?我的意思是我不能列出表中的所有哈希键,我不能删除给定哈希键的所有项目(为什么排序键必须要数字?!)...完全没用的 api (12认同)
  • 这让我感到惊讶.我对Cassandra更熟悉,它可以通过仅指定分区键来删除整个分区. (10认同)

小智 8

如果只想通过hash key删除,需要先查询记录,再使用batchDelete删除所有记录。

HashMap<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":v1", new AttributeValue().withS(value));
DynamoDBQueryExpression<DocumentTable> queryExpression = new DynamoDBQueryExpression<DocumentTable>()
            .withKeyConditionExpression("documentId = :v1")
            .withExpressionAttributeValues(eav);
List<DocumentTable> ddbResults = dynamoDBMapper.query(DocumentTable.class, queryExpression);
dynamoDBMapper.batchDelete(ddbResults);
Run Code Online (Sandbox Code Playgroud)

我想在这里指出一次deleteItem只删除一个项目,并且需要为此指定散列键和范围键。