AppSync 检查 DynamoDB 记录是否存在

AppSync check if DynamoDB record exists

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

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

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

以及以下响应映射模板:

#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
})

如果记录存在,这将正常工作,但如果不存在,则 AppSync 对整个 API 调用简单地 returns "null",似乎不会评估响应映射模板全部。有什么办法可以指示它不要这样做吗?

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

这是请求模板 2017 版本的预期行为。如果您希望对 $ctx.result 进行评估,请切换到 2018 版本,如下所示:

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

请参阅此 change log 了解更多详细信息。