使用 AWS AppSync 将项目附加到 DynamoDB
Posted
技术标签:
【中文标题】使用 AWS AppSync 将项目附加到 DynamoDB【英文标题】:Append item to list using AWS AppSync to DynamoDB 【发布时间】:2018-12-02 04:15:48 【问题描述】:这可能是一个愚蠢的问题,但我真的找不到办法。
所以,我有 DynamoDB 表,并且我在 AppSync api 中有架构。在表中,对于每一行,都有一个以列表作为其值的字段。那么如何在不替换现有项目的情况下将多个项目附加到此列表中?我应该如何编写该突变的解析器?
这是我的表格截图:
您可以看到列表中有多个程序。
我怎样才能再追加两个程序。
这是我的解析器的新屏幕截图: screenshot of resolver 我想在 UpdateItem 操作中添加一个存在检查方法。但是当前的代码不起作用。我想要的逻辑是使用“包含”方法来查看“toBeAddedProgramId”是否已经存在。但问题是,如何从User表中提取当前程序id列表,如何使程序id列表成为“list”类型(因为contains方法只取String set和String)。
我希望这个问题有意义。非常感谢各位。
最好, 哈里森
【问题讨论】:
【参考方案1】:要将项目附加到列表中,您应该使用 DynamoDB UpdateItem
操作。
Here is an example 如果您直接使用 DynamoDB
在 AWS AppSync 中,您可以使用 DynamoDB 数据源并在您的请求映射模板中指定 DynamoDB UpdateItem
操作。
您的UpdateItem
请求模板可能如下所示(修改它以满足您的需要):
"version" : "2017-02-28",
"operation" : "UpdateItem",
"key" :
"id" : "S" : "$context.arguments.id"
,
"update" :
"expression" : "SET #progs = list_append(#progs, :vals)",
"expressionNames":
"#progs" : "programs"
,
"expressionValues":
":vals" :
"L": [
"M" : "id": "S": "49f2c...." ,
"M" : "id": "S": "931db...."
]
We have a tutorial here 如果您有兴趣了解更多信息,请详细介绍
【讨论】:
非常感谢您的回答。我已经完成了教程。在此示例中, :val 的值在解析器中指定。但是在我的突变中,我只是传入一个列表作为参数,并且总是有一个错误说“xxx必须是一个列表”,它已经存在了。所以我在这里很贴。 您能否粘贴评估的请求模板(您可以通过在 API 设置页面上启用 API 日志来检索它)以及返回的确切错误消息?或者,如果您给我一个请求 ID、一个大致的时间戳和您的 API 所在的区域,以便我可以查看它。 非常感谢蒂诺的回复。我更改了一些代码,以便无法重现该错误。但是新代码有一个与类似问题相关的错误。请查看新的屏幕截图。非常感谢! 感谢您的示例。我让它在你的剪断下运行。但是您的列表中有一点 json 语法错误。要使用此示例,每个人都必须按照您的编写方式对其进行编辑/修改。以上是关于使用 AWS AppSync 将项目附加到 DynamoDB的主要内容,如果未能解决你的问题,请参考以下文章
AWS AppSync 中的 InvalidUserPoolException
如何使用 AWS AppSync 将文件上传到 AWS S3
在 React 中使用 AWS Amplify Appsync 上传图像