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 了解更多详细信息。
我正在尝试为 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 了解更多详细信息。