AppSync 检查 DynamoDB 记录是否存在

Ger*_*ddc 1 amazon-web-services aws-appsync

我正在尝试为 AppSync 编写一个解析器,它根据 DynamoDB 中记录的存在导出布尔字段的值。

我目前有以下请求映射模板:

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "field1": $util.dynamodb.toDynamoDBJson($ctx.args.field1),
        "field2": $util.dynamodb.toDynamoDBJson($ctx.args.field2)
    }
}
Run Code Online (Sandbox Code Playgroud)

以及以下响应映射模板:

#if($util.isNull($ctx.result))
    #set($exists = false)
#else
    #set($exists = true)
#end

$util.toJson({
    "field1": $ctx.args.field1,
    "field2": $ctx.args.field2,
    "exists": $exists
})
Run Code Online (Sandbox Code Playgroud)

如果记录存在,则这可以正常工作,但如果不存在,则 AppSync 只会为整个 API 调用返回“null”,并且似乎根本不会评估响应映射模板。有什么办法可以指示它不要这样做吗?

另一种选择是执行查询并查看响应的长度,但我不知道如何检查这些模板中的长度。

Sha*_*aju 5

这是2017请求模板版本的预期行为。如果您想$ctx.result评估,请切换到以下2018版本:

{
  "version": "2018-05-29",
  "operation": "GetItem",
  "key": {
    "id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
  },
}
Run Code Online (Sandbox Code Playgroud)

有关其他详细信息,请参阅此更改日志