Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Dynamo DB表上的JSON负载执行updateItem操作_Java_Json_Amazon Dynamodb - Fatal编程技术网

Java 如何使用Dynamo DB表上的JSON负载执行updateItem操作

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等)上指

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等)上指定更新操作


下面是使用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