我是VTL和AWS appsync的新手,并试图弄清楚事情是如何工作的。
表示列表中步骤的映射在存储到DynamoDB之前应该具有带有UUID的属性id。为此,我尝试迭代数组并访问map上的put方法,如下面的示例所示。
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key": {
"id" : $util.dynamodb.toDynamoDBJson($util.autoId())
},
#set($input = $util.dynamodb.toMapValues($ctx.args.input))
#set($input.createdAt = $util.dynamodb.toDynamoDB($util.time.nowISO8601()))
#foreach($step in $input.steps)
$step.put('id', $util.dynamodb.toDynamoDBJson($util.autoId())))
#end
"attributeValues": $util.toJson($input)
}我的第二次尝试:
#foreach($step in $input.steps)
#set($step.id = $util.dynamodb.toDynamoDBJson($util.autoId()))
#end但是,没有任何原因,我的地图没有id属性。是否存在这样的问题:foreach循环只给了我试图修改的映射的副本,而不是原始对象的副本?
谢谢您抽时间见我!希望我的问题能为所有VTL和appsync新手服务。
发布于 2021-08-13 03:35:13
确实如此,只是toMapValues实用程序方法返回了DynamoDB类型。
因此,如果"input.steps“应该是一个列表,那么你会得到一个类似于{"L":... }的对象。
试试这个:
#foreach($step in $input.steps.L)
$step.put('id', $util.dynamodb.toDynamoDBJson($util.autoId())))
#end https://stackoverflow.com/questions/68724596
复制相似问题