【问题标题】:Create or Read item in DynamoDb在 DynamoDb 中创建或读取项目
【发布时间】:2020-01-01 16:41:50
【问题描述】:

我正在尝试从 DynamoDB(使用 Appsync graphql)读取 ID 为 X 的项目,如果没有,我希望它创建一个默认项目。

这似乎应该是一个正常的用例。但是我尝试过的解决方案都很糟糕:

  1. 我尝试创建一个管道解析器,它首先获取项目,然后在第二个函数中创建一个项目,如果前一个函数的结果中没有项目。这与返回读取的项目有关。

  2. 我尝试在具有此 ID 的项目不起作用的条件下进行 PutAction。这可以满足我的需要,但无论我对响应映射模板做什么,我都无法更改错误警告的响应。

那么如何有效地为 DynamoDb 创建一个“读取 - 或创建如果它不存在”的解析器?

【问题讨论】:

    标签: amazon-dynamodb aws-appsync


    【解决方案1】:

    事实证明,我已经接近解决方案了。 根据此文档:https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-condition-handling

    1. 创建一个 putItem 解析器,有条件地检查是否存在具有相同唯一标识符的项目(在 DynamoDB 中,这通常是主键和排序键组合)
    2. 如果解析器确定读取的对象与预期的新对象没有区别,则不会发送警告。所以我们可以简单地从比较中删除所有字段。

    例子:

    {
        "version" : "2017-02-28",
        "operation" : "PutItem",
        "key" : {
            "id" : { "S" : "${ctx.args.id}" }
        },
        "condition" : {
          "expression" : "attribute_not_exists(id)",
          "equalsIgnore": [ "__typename", "_version", "_lastChangedAt", "_createdAt", "name", "owner"]
       },
        "attributeValues": {
            "name": { "S" : "User Username" }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      相关资源
      最近更新 更多