VTL:将新的 属性 添加到数组内的映射(AWS Appsync、DynamoDB)

VTL: Add a new property to an maps inside an array (AWS Appsync, DynamoDB)

我是 VTL 和 AWS appsync 的新手,我试着了解它们是如何工作的。

表示列表中步骤的映射在存储到 DynamoDB 之前应该具有 属性 id 和 UUID。为此,我尝试遍历数组并访问地图上的 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

但是,无缘无故,我的地图仍然没有 属性 idforeach 循环给我的可能只是我尝试修改的地图的副本而不是原始对象的问题吗?

感谢您的宝贵时间! 希望我的问题能为 VTL 和 appsync

的所有新手服务

确实如此,只是 toMapValues 实用程序方法返回给您 DynamoDB 类型。

因此,如果“input.steps”应该是一个列表,那么您将在其中得到一个对象,例如 {"L": [ ... ]}

试试这个:

#foreach($step in $input.steps.L)
    $step.put('id', $util.dynamodb.toDynamoDBJson($util.autoId())))
  #end