如何解决如果参数为空列表,AWS AppSync vtl make set null
我想更新表格中的“人物”项目。
我想更新人名和他的技能集。
我们也可能只使用 updatePerson
突变来更新名称。我们稍后会更新技能。
此时参数“技能”是一个空列表。但是 DynamoDB 不允许空集。
目前我试图通过首先检查技能参数是否为空列表来解决这个问题。但它仍然告诉我“key :skills 的字符串集可能不为空”。
这是我当前的请求映射模板,但 atm isNullOrDefault
检查不起作用。
#if ($util.isNullOrEmpty($context.arguments.skills))
#set ($skills = $utils.dynamodb.toNullJson())
#else
#set ($skills = $utils.dynamodb.toStringSetJson($context.arguments.skills))
#end
{
"version" : "2018-05-29","operation" : "UpdateItem","key": {
"id" : $utils.dynamodb.toDynamoDBJson($context.arguments.id)
},"update" : {
"expression" : "set #name = :name,#skills= :skills,"expressionNames" : {
"#name": "name","#skills": "skills",},"expressionValues" : {
":name" : $utils.dynamodb.toDynamoDBJson($context.arguments.name),":skills" : $skills,}
}
}
如果技能参数不是空数组,你知道我如何设置技能集,如果技能参数是空数组则不设置它吗?
解决方法
我认为您只需从项目 item.skills = undefined
中删除该属性,而不是将 null 设置为字符串集属性。
您可以使用 SET 和 REMOVE 操作来实现这一点。更新是根据 skills
的输入动态生成的。示例代码(我自己没有测试过)
#set ($update = {
"expression" : "set #name = :name remove #skills","expressionNames" : {
"#name": "name","#skills": "skills"
},"expressionValues" : {
":name" : $utils.dynamodb.toDynamoDBJson($context.arguments.name)
}
})
#if (!$util.isNullOrEmpty($context.arguments.skills))
#set ($update = {
"expression" : "set #name = :name set #skills = $skill","expressionNames" : {
"#name": "name","#skills": "skills"
},"expressionValues" : {
":name" : $utils.dynamodb.toDynamoDBJson($context.arguments.name),":skills" :$utils.dynamodb.toStringSetJson($context.arguments.skills),}
})
#end
{
"version" : "2018-05-29","operation" : "UpdateItem","key": {
"id" : $utils.dynamodb.toDynamoDBJson($context.arguments.id)
},"update" : $update // or maybe $util.toJson($update)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。