2016-01-15 98 views
1

我一直在試圖從表中DynamoDB通過Java代碼刪除項目,但每次嘗試我做的同樣的錯誤結果:無法從DynamoDB表(JAVA)刪除項目

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

表名僅僅是表名,憑據已經被證實是正確的,並且COGN itoId是我試圖刪除的項目的實際ID。有問題的表格有cognitoId作爲主鍵,我不明白爲什麼刪除與模式不匹配。該表還有一個排序鍵或範圍鍵(我不確定它是什麼,因爲文檔非常模糊)。我一直指的是這裏的文檔: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key

+0

這[使用主鍵刪除項目(http://stackoverflow.com/questions/27455709/how-to-delete-record-using-primarykey- in-dynamodb)應該可以幫助你解決問題。 –

+0

嘗試使用'''deleteItem(String hashKeyName,Object hashKeyValue)''' –

回答

2

您在創建表時是否有排序鍵?如果是這樣,那麼您必須指定排序鍵,因爲您在表上具有組合鍵。有一個排序鍵意味着你可以有多個記錄與相同的主鍵,但排序鍵必須是唯一的

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

排序關鍵字也可以被稱爲在AWS迪納摩範圍或範圍鍵DB文檔和控制檯。

所以你刪除的項目會像

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

你是什麼意思的「組合鍵」? – zackygaurav

+0

在DynamoDB中,主鍵既可以是單屬性分區鍵也可以是複合分區排序鍵 –