我有一个dynamodb表,其中一列是Map类型。我希望更新查询从地图中删除该项目(如果该项目存在于地图中),或者将该项目添加到地图(如果该项目不在地图中)。 如何为这个问题编写VTL?
答案 0 :(得分:0)
您必须为此使用管道解析器。
我在类似情况下对单个突变的喜欢/不喜欢这样做。
您可以根据自己的任务更改和修改此代码。
likeEvent.req.vtl
#if( "$context.identity.username" =="guest")
$util.unauthorized()
#end
#set($id=$util.autoId())
$util.qr($ctx.stash.put("sk", ".."))
$util.qr($ctx.stash.put("skBegining", ".."))
$util.qr($ctx.stash.put("id", ".."))
{}
likeEvent.res.vtl
{
"value": "success"
}
checkIfLiked.req.vtl
{
"version": "2018-05-29",
"operation": "Query",
"index": "creator-sk-index",
"query" : {
"expression": "creator = :creator and begins_with(sk, :sk) ",
"expressionValues" : {
":creator" : $util.dynamodb.toDynamoDBJson("$context.identity.username"),
":sk" : $util.dynamodb.toDynamoDBJson("$ctx.stash.skBegining")
}
}
}
checkIfLiked.res.vtl
$util.toJson($ctx.result)
like.req.vtl
#if( "$context.stash.username" =="guest")
$util.unauthorized()
#end
#set($sk=$ctx.stash.sk)
#set($id=$ctx.stash.id)
#set( $input = {} )
$util.qr($input.put("updatedAt", $util.time.nowEpochSeconds()))
$util.qr($input.put("createdAt", $util.time.nowEpochSeconds()))
$util.qr($input.put("creator", "$ctx.identity.username"))
#if($context.prev.result.items.size()!=0)
{
"version" : "2017-02-28",
"operation" : "DeleteItem",
"key" : {
"id": $util.dynamodb.toDynamoDBJson("$context.prev.result.items[0].id"),
"sk": $util.dynamodb.toDynamoDBJson("$context.prev.result.items[0].sk")
}
}
#else
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
"id": $util.dynamodb.toDynamoDBJson("$id"),
"sk": $util.dynamodb.toDynamoDBJson("$sk")
},
"attributeValues" : $util.dynamodb.toMapValuesJson($input)
}
#end
like.res.vtl
{
"value": "success"
}