How to put a new key-value pair into a map in DynamoDB? (java)

匿名 (未验证) 提交于 2019-12-03 02:49:01

问题:

I have a DynamoDB attribute whose value is a map from a Number to a String. I am trying to put in a new key-value pair. From what I've read, this seems to be possible, but I don't know how.

I assume the solution is similar to the one in the link below:

How to update a Map or a List on AWS DynamoDB document API?

But I do not believe the example is on putting in a new item to a map. Could someone show me how to put in an item to a map?

Thanks.

EDIT:

I do not want to get the item, locally make the changes, and put it back. I am working with multiple clients who might interact concurrently (and I assume the update by dynamo ensures there will be no race conditions).

回答1:

With the following arguments to UpdateItem, you can condition adding a map entry at #number when map.#number does not exist in the map already:

UpdateExpression = "SET map.#number = :string" ExpressionAttributeNames = { "#number" : "1" } ExpressionAttributeValues = { ":string" : "the string to store in the map at key value 1" } ConditionExpression = "attribute_not_exists(map.#number)" 


回答2:

Visit http://www.tryyourskill.com/aws/insert-or-append-key-values-map-in-dynamodb-using-java may help you with the code snippet to add or append values in map column

public boolean insertKeyValue(String tableName, String primaryKey, String      primaryKeyValue, String updateColumn, String newKey, String newValue) {      //Configuration to connect to DynamoDB     Table table = dynamoDB.getTable(tableName);     boolean insertAppendStatus = false;     try {         //Updates when map is already exist in the table         UpdateItemSpec updateItemSpec = new UpdateItemSpec()             .withPrimaryKey(primaryKey, primaryKeyValue)             .withReturnValues(ReturnValue.ALL_NEW)             .withUpdateExpression("set #columnName." + newKey + " = :columnValue")             .withNameMap(new NameMap().with("#columnName", updateColumn))             .withValueMap(new ValueMap().with(":columnValue", newValue))             .withConditionExpression("attribute_exists("+ updateColumn +")");          table.updateItem(updateItemSpec);         insertAppendStatus = true;     //Add map column when it's not exist in the table     } catch (ConditionalCheckFailedException e) {         HashMap<String, String> map =  new HashMap<>();         map.put(newKey, newValue);         UpdateItemSpec updateItemSpec = new UpdateItemSpec()             .withPrimaryKey(primaryKey,primaryKeyValue)             .withReturnValues(ReturnValue.ALL_NEW)             .withUpdateExpression("set #columnName = :m")             .withNameMap(new NameMap().with("#columnName", updateColumn))             .withValueMap(new ValueMap().withMap(":m", map));          table.updateItem(updateItemSpec);         insertAppendStatus = true;     } catch(Exception e) {         e.printStackTrace();     }     return insertAppendStatus; } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!