Amazon web services AWS AppSync&;DynamoDB单表设计:基于另一项的PutItem';s字段值

Amazon web services AWS AppSync&;DynamoDB单表设计:基于另一项的PutItem';s字段值,amazon-web-services,amazon-dynamodb,aws-appsync,Amazon Web Services,Amazon Dynamodb,Aws Appsync,我是AWS AppSync的新手,在DynamoDB中采用了单表模式。现在,我尝试基于同一表中现有项中的特定字段值创建一个项。例如,我有一个名为transaction的表,它包含两种类型的记录 请求 回应 如上表所示,我可以为特定请求插入(PutItem)多个响应。在插入新响应之前,我需要验证请求(RequestID)是否已经存在。有没有办法通过解析器中的条件表达式来实现?下面是我当前的请求解析程序代码,该代码未按预期工作 #set( $Id = $util.autoId() ) { &quo

我是AWS AppSync的新手,在DynamoDB中采用了单表模式。现在,我尝试基于同一表中现有项中的特定字段值创建一个项。例如,我有一个名为transaction的表,它包含两种类型的记录

  • 请求
  • 回应
  • 如上表所示,我可以为特定请求插入(PutItem)多个响应。在插入新响应之前,我需要验证请求(RequestID)是否已经存在。有没有办法通过解析器中的条件表达式来实现?下面是我当前的请求解析程序代码,该代码未按预期工作

    #set( $Id = $util.autoId() )
    {
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key" : {
        "PK": $util.dynamodb.toDynamoDBJson("USER#$ctx.args.input.UserId"),
        "SK": $util.dynamodb.toDynamoDBJson("RESPONSE#$Id"),
    },
    "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args.input),
     "condition": {
            "expression": "SK = :SK",
            "expressionValues" : {
                       ":SK" : {
                           "S" : "REQUEST#${ctx.args.input.RequestId}"
                       }
         }
      }
    

    }

    您将无法基于另一个条目号执行条件PutItem。在这种情况下,您需要使用。在第一个函数中,您将获取请求项,在第二个函数中,您可以执行PutItem条件-前面的GetItem结果将作为
    $ctx.prev.result

    提供。您可以使用DynamoDB事务在一个请求映射模板中执行此操作,请参见()

    在其中一个“TransactionWriteItems”中,您使用一个条件更新请求项中的任意值(或者可能是响应数),该条件检查请求项在SK中是否存在该请求ID。如果条件成功,则更新请求项

    还要确保“TransactionWriteItems”中有响应项,以便在请求条件通过时也会写入响应项