使用 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 上传图像

基于位置的 AWS AppSync 事件订阅

在 IOS 上使用 AWS AppSync 将图像上传到 S3

无法将大型 graphql 模式上传到 aws appsync