首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VTL:向数组内的映射添加新属性(AWS Appsync,DynamoDB)

VTL:向数组内的映射添加新属性(AWS Appsync,DynamoDB)
EN

Stack Overflow用户
提问于 2021-08-10 09:50:06
回答 1查看 274关注 0票数 0

我是VTL和AWS appsync的新手,并试图弄清楚事情是如何工作的。

表示列表中步骤的映射在存储到DynamoDB之前应该具有带有UUID的属性id。为此,我尝试迭代数组并访问map上的put方法,如下面的示例所示。

代码语言:javascript
复制
{
  "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)
}

我的第二次尝试:

代码语言:javascript
复制
#foreach($step in $input.steps)
    #set($step.id = $util.dynamodb.toDynamoDBJson($util.autoId()))
  #end

但是,没有任何原因,我的地图没有id属性。是否存在这样的问题:foreach循环只给了我试图修改的映射的副本,而不是原始对象的副本?

谢谢您抽时间见我!希望我的问题能为所有VTL和appsync新手服务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-13 03:35:13

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

因此,如果"input.steps“应该是一个列表,那么你会得到一个类似于{"L":... }的对象。

试试这个:

代码语言:javascript
复制
#foreach($step in $input.steps.L)
    $step.put('id', $util.dynamodb.toDynamoDBJson($util.autoId())))
  #end 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68724596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档