如何将一个新的键值对放入DynamoDB中的映射中?(java)



我有一个DynamoDB属性,它的值是从Number到String的映射。我正在尝试放入一个新的键值对。从我读到的内容来看,这似乎是可能的,但我不知道怎么做。

我认为解决方案类似于下面链接中的解决方案:

如何更新AWS DynamoDB文档API上的地图或列表?

但我不认为这个例子是在地图上添加新项目。有人能教我如何把一个项目放在地图上吗?

谢谢。

编辑:

我不想获取该项目,在本地进行更改,然后将其放回原处。我正在与多个可能同时交互的客户合作(我认为dynamo的更新可以确保不会出现竞争条件)。

使用UpdateItem的以下参数,您可以在映射时在#number处添加映射条目#地图中已经不存在数字:

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

访问http://www.tryyourskill.com/aws/insert-or-append-key-values-map-in-dynamodb-using-java可以帮助您在映射列中添加或附加值的代码片段

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

相关内容

  • 没有找到相关文章

最新更新