如何针对一个字段过滤具有多个值的表

时间:2018-08-23 13:22:40

标签: graphql aws-appsync

我是AWS App Sync的新手,我想查询一个字段接受多个值并根据输入返回结果。这可能吗?

listBookByName(bookID: [String], limit: Int, nextToken: String): listBookByNameConnection

2 个答案:

答案 0 :(得分:0)

您可以使用 DynamoDB批处理解析器来完成此操作。

您会将解析器附加到 listBookByName 字段。请求映射模板(执行GraphQL查询并将其转换为DynamoDB查询)如下所示:

{{1}}

然后,您的响应映​​射模板将不得不将结果编组为您的 listBookByNameConnection 类型。

这是文档中的一个示例,其中他们具有 batchGet 查询,该查询获取标识符列表,并返回帖子列表。

https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-batch.html#single-table-batch

答案 1 :(得分:0)

我已经按照链接中所述配置了设置。但它一直都返回null。

type Query {
listBookByName(bookID: [String], limit: Int, nextToken: String): istBookByNameConnections
}

type listBookByNameConnections {
    items: [Books]
}

我的解析器映射:

#set($ids = [])
#foreach($id in ${ctx.args.bookID})
    #set($map = {})
    $util.qr($map.put("id", $util.dynamodb.toString($id)))
    $util.qr($ids.add($map))
#end

{
    "version" : "2018-05-29",
    "operation" : "BatchGetItem",
    "tables" : {
        "Books": {
            "keys": $util.toJson($ids),
            "consistentRead": true
        }
    }
}

响应映射:

$util.toJson($ctx.result.data.Books)

我用来检查响应的查询:

query get {
    listBookByName(bookID:["JAVA","JUNIT"]){
    items{
      name
    }
    }
}

输出:  {    “数据”:{        “ listDriverTripsByName”:null       }     }