触发更多突变的AppSync突变

时间:2018-05-25 23:26:35

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

我有两个表:帖子和用户

createPost突变解析器中,我设置了一些默认值做某些属性(想想userId,createdAt timestamp,isDeleted flag等)。另外,我想增加用户numPosts计数器。

这可以通过标准旋转变压器实现吗?

如果没有,那么更好的选择是什么?为什么?

替代方案1)使用DynamoDB Stream并在添加新的Post记录时触发lambda函数,该记录会增加用户的numPosts计数器。

备选方案2)使用lambda解析器并将所有逻辑移到那里而不是标准解析器。

3 个答案:

答案 0 :(得分:3)

您可以使用BatchPut Operation同时更新多个表。有关详细信息,请参阅Amazon DynamoDB Batch Operations指南。

你需要一个像

这样的解析器
{
  "version" : "2018-05-29",
  "operation" : "BatchGetItem",
  "tables" : {
    "Posts": {
        ...data
    },
    "NumPosts":{
        ...data
    }
  }
}

答案 1 :(得分:0)

我走了"使用lambda解析器并将所有逻辑移到那里而不是标准解析器。"对于我的应用程序。

你可以通过这种方式进行大量控制,实时记录,公制,并且可以随心所欲地做任何事情,但你必须为lambda付费。

如果其他更改可能在事后发生,并且将数据置于中间状态并不重要,则您选择观看流可能更有意义。

如果没有完整的背景,很难评估最佳选择。

答案 2 :(得分:-1)

Update Expressions可用于DynamoDB;它显然属于AppSync的Resolver Mapping Template Reference for DynamoDB。通过代码中给出的示例代码,您可以通过以下UpdateItem代码进行操作,这对您来说非常有用:

{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key": {
        "id" : { "S" : "${context.arguments.id}" }
    },
    "update" : {
        "expression" :  "ADD numPosts :incrCount",
        "expressionValues" : {
           ":incrCount" : { "N" : 1 }
        }
    }
}

编辑:此帖子假设您的numPosts计数器保留为Users表中的字段。