Amazon dynamodb 在DynamoDb中创建或读取项

Amazon dynamodb 在DynamoDb中创建或读取项,amazon-dynamodb,aws-appsync,Amazon Dynamodb,Aws Appsync,我正在尝试从DynamoDB读取ID为X的项(使用Appsync graphql),如果没有,我希望它创建一个默认项 这似乎应该是一个正常的用例。但我尝试过的解决方案都非常糟糕: 我试图创建一个管道解析器,首先获取该项,然后在第二个函数中创建一个项(如果前一个函数的结果中没有项)。这与返回已读项有关 我尝试在具有此ID的项不工作的条件下执行PutAction。这就是我所需要的,但无论我对响应映射模板做了什么,我都无法更改来自错误警告的响应 那么,如何有效地为DynamoDb创建“读取或创建(如果

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

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

  • 我试图创建一个管道解析器,首先获取该项,然后在第二个函数中创建一个项(如果前一个函数的结果中没有项)。这与返回已读项有关

  • 我尝试在具有此ID的项不工作的条件下执行PutAction。这就是我所需要的,但无论我对响应映射模板做了什么,我都无法更改来自错误警告的响应


  • 那么,如何有效地为DynamoDb创建“读取或创建(如果不存在)”解析器呢?事实证明,我已经接近解决方案了。 根据本文件:

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

    {
        "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" }
        }
    }