Amazon dynamodb 如何在dynamodb上更新JSONArray?(JAVA SDK)
我在dynamodb上有一个JSONObject存储,如下所示Amazon dynamodb 如何在dynamodb上更新JSONArray?(JAVA SDK),amazon-dynamodb,Amazon Dynamodb,我在dynamodb上有一个JSONObject存储,如下所示 "info" : { "nn": { "nnn": [{ "nnnn": "bb" }] }, "ln": "zheng1", "fn": "franky", "sn": [{ "aa": "zheng2" }] } 我想通
"info" : {
"nn": {
"nnn": [{
"nnnn": "bb"
}]
},
"ln": "zheng1",
"fn": "franky",
"sn": [{
"aa": "zheng2"
}]
}
我想通过UpdateItemSpec更新info.sn
List<JSONObject> li= new ArrayList<JSONObject>();
JSONObject j = new JSONObject();
j.append("kk","kkkk");
li.add(j);
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("Age", age, "Name", name)
.withExpressionSpec(new ExpressionSpecBuilder()
.addUpdate(ExpressionSpecBuilder.S("phone").set("0900000222"))
.addUpdate(ExpressionSpecBuilder.S("info.ln").set("zheng32"))
.addUpdate(ExpressionSpecBuilder.list_append("info.sn", li)) // ERRO
.withCondition(ExpressionSpecBuilder.N("weight").eq(82))
.buildForUpdate())
.withReturnValues(ReturnValue.UPDATED_NEW);
List li=new ArrayList();
JSONObject j=新的JSONObject();
j、 附加(“kk”、“kkk”);
li.添加(j);
UpdateItemSpec UpdateItemSpec=新的UpdateItemSpec()
.withPrimaryKey(“年龄”、“年龄”、“姓名”、“姓名”)
.withExpressionSpec(新的ExpressionSpecBuilder()
.addUpdate(ExpressionSpecBuilder.S(“电话”).set(“0900000222”))
.addUpdate(ExpressionSpecBuilder.S(“info.ln”).set(“zheng32”))
.addUpdate(ExpressionSpecBuilder.list_append(“info.sn”,li))//错误
.带条件(表达式SpecBuilder.N(“重量”).eq(82))
.buildForUpdate())
.withReturnValue(ReturnValue.UPDATED\u NEW);
错误将是list\u append,我找不到更新JSONArray的方法,有人可以帮忙吗?应该会有帮助。因此,您的更新项目规格可能如下所示
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("Age", age, "Name", name)
.withNameMap(new NameMap().with("#P", "info.sn"))
.withValueMap(new ValueMap()
.withList(":val", li) //list of map
.withList(":empty_list", new ArrayList<>()))
.withUpdateExpression("SET #P = list_append(if_not_exists(#P, :empty_list), :val)");
UpdateItemSpec UpdateItemSpec=new UpdateItemSpec()
.withPrimaryKey(“年龄”、“年龄”、“姓名”、“姓名”)
.withNameMap(newnamemap().with(“#P”,“info.sn”))
.withValueMap(新的ValueMap()
.withList(“:val”,li)//地图列表
.withList(“:empty_list”,new ArrayList()))
.withUpdateExpression(“SET#P=list_append(如果不存在(#P,:empty_list),:val)”;
起初我尝试使用ExpressionSpecBuilder,但也失败了。老实说,Java客户端是Java反模式的纪念碑 下面是一个使用ExpressionSpecBuilder样式的列表附加示例
final UpdateItemExpressionSpec xspec = new ExpressionSpecBuilder()
.addUpdate(
ExpressionSpecBuilder.L("log")
.set(ExpressionSpecBuilder.L("log") // yes you have to repeat the column name
.listAppend(value)))
.buildForUpdate();
final UpdateItemOutcome updateItemOutcome = table.updateItem("Id", id, xspec);