适用于"complex"项的 AWS Java 开发工具包 DynamoDB 更新表达式



所以我有以下条目testd是排序键:

{
"userId": "admin",
"testId": "1234",
"picture": "abstract",
"numOfUsers": 1,
"Tests": [
{
"duration": 1234,
"typeId": "2345",
"interval": 450000,
"quantity": 333333
},
{
"duration": 1234,
"typeId": "6789",
"interval": 450000,
"quantity": 333333
},
{
"duration": 1234,
"typeId": "2020",
"interval": 450000,
"quantity": 333333
}
]
}
如您所见,在测试中有几个相同的项目。我的问题是如何用相同的值更新它们?我的意思是,例如,我想将所有三个对象的持续时间从1234更新为2222。 下面是我测试过的代码:
Table table = dynamoDB.getTable(tableName);
Map<String, String> expressionAttributeNames = new HashMap<String, String>();
expressionAttributeNames.put("#A", "Duration");
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":val1", "2222");
UpdateItemOutcome outcome =  table.updateItem(
"testId",         
"1234",           
"set #A :val1", 
expressionAttributeNames,
expressionAttributeValues);

任何帮助都将是感激的:)

根据我对DynamoDb和Expressions的理解,您需要告诉DynamoDb钻取您想要的属性。

你的代码告诉它更新Duration…但时间在哪里?它不在项目的顶层。

看看是否可以:

Table table = dynamoDB.getTable(tableName);
Map<String, String> expressionAttributeNames = new HashMap<String, String>();
expressionAttributeNames.put("#Dur", "duration");
expressionAttributeNames.put("#Test", "Tests");

Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":val1", "2222");
UpdateItemOutcome outcome =  table.updateItem(
"testId",         
"1234",           
"set #Test.#Dur :val1", 
expressionAttributeNames,
expressionAttributeValues);

===编辑==

ValueMap valueMap = new ValueMap().withNumber(":dur", 2222));
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("key", year)
.withUpdateExpression("set Tests.duration = :dur")
.withValueMap(valueMap)
.withReturnValues(ReturnValue.UPDATED_NEW);
UpdateItemOutcome updateItemOutcome = table.updateItem(updateItemSpec);

===编辑====

UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("key", "primaryKey")
.withUpdateExpression("set Tests.#duration = :value")
.withNameMap(new NameMap().with("#duration", "duration"))
.withValueMap(new ValueMap().withNumber(":value", 2222))
.withReturnValues(ReturnValue.UPDATED_NEW);

相关内容

  • 没有找到相关文章

最新更新