问题背景:在使用AWS SDK的PutItem方法将项目存储在DynamoDB表中时,可能会发现表中没有新条目或没有更新现有项。 这通常是由于表中已经存在具有相同主键的项。 如果您使用PutItem方法插入具有相同主键的项,则会覆盖原始项的值。
解决方案:您可以使用DynamoDB的UpdateItem方法来检查条目是否已存在,然后选择采取适当的操作。 下面是一个使用AWS SDK for Java的代码示例:
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.UpdateItemOutcome;
import com.amazonaws.services.dynamodbv2.document.spec.UpdateItemSpec;
import com.amazonaws.services.dynamodbv2.model.ReturnValue;
// Initialize DynamoDB client
DynamoDB dynamoDB = new DynamoDB(client);
// Get table object
Table table = dynamoDB.getTable("table-name");
// Create an Item object
Item item = new Item()
.withPrimaryKey("id", "item-id")
.withInt("count", 0);
// Create a condition expression to check if the item exists
String conditionExpression = "attribute_not_exists(id)";
// Create an UpdateItemSpec object to update the item if it does not exist
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("id", "item-id")
.withValueMap(item.asMap())
.withConditionExpression(conditionExpression)
.withReturnValues(ReturnValue.ALL_NEW);
// Call the UpdateItem method to insert the item if it does not exist
UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
// Check the outcome
System.out.println("Outcome: " + outcome.getItem().toJSONPretty());
该示例首先使用DynamoDB客户端初始化DynamoDB对象。 然后,它使用getTable方法获取DynamoDB表的Table对象。 接下来,它创建一个包含主