具有多个表达式的 AppSync VTL 更新?

问题描述 投票:0回答:0

我正在为 AppSync 开发一个 VTL 请求映射模板,我需要解析器从一个字符串集属性中删除一个值,并将该值添加到另一个字符串集属性。注意,这些是字符串集,而不是列表,所以我无法使用 list_append 或其他列表方法

#if( $ctx.args.user )
    #set($username = $ctx.args.user)
#else
    #set($username = $ctx.identity.username)
#end


{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key" : {
        "PK": $util.dynamodb.toDynamoDBJson("whatever")
    },
    "update": {
      "expression" : "ADD #S1 :usr, DELETE #S2 :usr",
      "expressionNames" : {
           "#S1" : "SS1",
           "#S2" : "SS2",
       },
       "expressionValues" : {
           ":usr" : { "SS" : ["$username"] }
       }
    },
    "condition": {
        "expression": "N1 = :ev OR contains(SS3, :un)",
        "expressionValues" : {
            ":ev" : { "N" : 2 },
            ":un" : { "S" : "$ctx.identity.username" }
        }
    }
}

我得到的错误看起来像

Invalid UpdateExpression: Syntax error; token: \"DELETE\", near: \", DELETE #S2\" (Service: DynamoDb, Status Code: 400, Request ID: G6TU7O1RU56M6G5TEUC1RPFNFJVV4KQNSO5AEMVJF66Q9ASUAAJG)

我能够通过使用成功添加到 SS1 和 SS2

"expression" : "ADD #S1 :usr, #S2 :usr",

但似乎我无法同时使用 ADD 和 DELETE,同样我尝试同时使用 ADD 和 SET 也失败了。有什么方法可以使用一个命令对表中单个项目的字符串集进行添加和删除吗?

amazon-web-services amazon-dynamodb aws-appsync vtl aws-appsync-resolver
© www.soinside.com 2019 - 2024. All rights reserved.