Java 如何使用Dynamo DB表上的JSON负载执行updateItem操作
Dynamo DB文档API允许使用json负载执行put操作Java 如何使用Dynamo DB表上的JSON负载执行updateItem操作,java,json,amazon-dynamodb,Java,Json,Amazon Dynamodb,Dynamo DB文档API允许使用json负载执行put操作 Item item = Item.fromJSON(payload); table.putItem(item); 但是,我找不到类似的方法来使用Json负载执行updateItem Dynamo DB支持吗?UpdateItemSpec当前不接受项作为输入——您必须首先解析json内容(可能是通过Item.fromJSON),然后使用AttributeUpdate或UpdateExpression在每个字段(SET、ADD等)上指
Item item = Item.fromJSON(payload);
table.putItem(item);
但是,我找不到类似的方法来使用Json负载执行updateItem
Dynamo DB支持吗?UpdateItemSpec当前不接受项作为输入——您必须首先解析json内容(可能是通过Item.fromJSON),然后使用AttributeUpdate或UpdateExpression在每个字段(SET、ADD等)上指定更新操作
下面是使用UpdateExpression更新项目的文档我为此苦苦挣扎了一段时间,最后你不得不使用地图
UpdateItemOutcome updateItemOutcome = table.updateItem(
new UpdateItemSpec()
.withPrimaryKey("id", "yourId")
.withUpdateExpression("SET document.field = :field")
.withValueMap(new ValueMap()
.withMap(":field", "map of key value pairs that will get serialized to json")));
下面是一个关于如何在Javascript中实现的代码片段
let updateExpression='SET';
让expressionAttributeValues={};
常量键=对象键(有效载荷);
for(键的常数键){
updateExpression+=`${key}=:${key},`;
expressionAttributeValues[`:${key}`]=有效负载[key];
}
updateExpression=updateExpression.slice(0,-1);
设params={
TableName:“您的表名”,
关键:{
id:id
},
UpdateExpression:UpdateExpression,
ExpressionAttributeValues:ExpressionAttributeValues,
返回值:“全新”
}
更新(参数,(错误,结果)=>{})代码>你想完成什么?是否有理由不再调用putItem
?我的理解和观察是,putItem将覆盖整个项目。这是不需要的,因为我拥有的更新负载没有现有记录拥有的所有成员。如果我再次输入,这实际上会导致丢失这些成员。我正在解析JSON树,方法是将每个顶级属性读取为“Object”,然后使用该值创建AttributeUpdate。然而,putItem支持from JSON操作而updateItem不支持有什么特别的原因吗?要小心保留字,如“name”,应该以某种方式使用ExpressionAttributeNames