Appsync执行UpdateItem提示双路径重叠错误如何解决?
问题原因
你遇到的报错是DynamoDB UpdateExpression的原生语法限制:不允许在同一个SET语句中同时更新存在父子嵌套关系的两个路径。你的原代码同时操作了父属性userStatus和它的子属性userStatus.#idx,触发了路径重叠的校验错误。
解决方案
将父属性userStatus也通过表达式名称别名化,即可绕过解析限制,同时完成父映射初始化、子键赋值的需求,修改后的请求模板代码如下:
{ "version": "2018-05-29", "operation": "UpdateItem", "key": { "topicId": $util.dynamodb.toDynamoDBJson($ctx.stash.topicId) }, "update" : { "expression" : "SET #userStatus = if_not_exists(#userStatus, :emptymap), #userStatus.#idx = :userContent", "expressionNames": { "#userStatus": "userStatus", "#idx": "$ctx.args.input.event.payload.userId" }, "expressionValues": { ":emptymap" : $util.dynamodb.toDynamoDBJson({}), ":userContent" : $util.dynamodb.toDynamoDBJson($userStatusContent) } } }
原理解释
DynamoDB解析UpdateExpression时,如果直接字面量引用父子路径会被判定为操作重叠,将父属性也用别名替换后,解析器不会再判定为路径冲突,同时if_not_exists的初始化逻辑、子键赋值逻辑都可以正常执行,无需拆分两次请求。
内容的提问来源于stack exchange,提问作者Deepa Mukherjee
相关产品推荐
相关产品推荐

