在AWS Resolver映射模板中,是否有任何方法可以从对象中删除字段?

时间:2019-10-08 12:45:20

标签: amazon-web-services aws-appsync vtl

我正在使用解析器映射模板在AWS GraphQL中为我的AppSync解析器编写代码。

我知道有一个put方法可以用来向输入对象或任何其他对象添加字段。像这样(例如):

$util.qr($name.put("firstName", "$ctx.args.input.firstName"))

但是现在我想从对象(例如输入对象)中删除字段。 是否有任何类似于put方法的方法,但要删除字段。像这样:

$util.qr($ctx.args.input.remove("firstName"))

我是AWS和DynamoDBAppSync的新手。(您可以将我视为绝对的初学者。)

3 个答案:

答案 0 :(得分:1)

使用foreach并创建一个新数组。

#set($newInput={})

#foreach ($key in $ctx.args.input.keySet())
  #if($key!="firstName")
     $util.qr($newInput.put($key, $ctx.args.input.get($key)))
  #end
#end

答案 1 :(得分:0)

是的,通常您可以在映射模板中创建的对象上使用$myObject.remove("myKey"),但是,我将添加免责声明,因为某些部分是不可变的,因此这并不总是适用于$ ctx中的对象。 AppSync捆绑了utility methods,使在映射模板中处理对象更加容易(例如,制作对象的副本)。该功能实际上与Apache Velocity的功能相关联,因此您可以在这些文档中详细了解其功能。

答案 2 :(得分:0)

在AppSync中,查询或变异中的参数在请求映射模板中显示为$context.args。如果您传入了名为input的参数,则可以按以下步骤将其删除:

$util.quiet($context.args.remove("input"))

或其使用静默的别名(与上述相同):

$util.qr($context.args.remove("input"))

这可以在请求和响应映射模板中使用。它也可以用于删除嵌套属性:

$util.qr($context.args.input.remove("nestedProp"))