Graphql 如何针对一个字段筛选具有多个值的表

Graphql 如何针对一个字段筛选具有多个值的表,graphql,aws-appsync,Graphql,Aws Appsync,我不熟悉AWS应用程序同步,我想查询哪个应用程序对一个字段接受多个值,并根据输入返回结果。这可能吗 listBookByName(bookID:[String],limit:Int,nextToken:String):listBookByNameConnection您可以使用DynamoDB批处理解析程序来完成此操作 您可以将解析程序附加到listBookByName字段。请求映射模板(接受GraphQL查询并将其转换为DynamoDB查询)如下所示: #set($ids = []) #fore

我不熟悉AWS应用程序同步,我想查询哪个应用程序对一个字段接受多个值,并根据输入返回结果。这可能吗


listBookByName(bookID:[String],limit:Int,nextToken:String):listBookByNameConnection
您可以使用DynamoDB批处理解析程序来完成此操作

您可以将解析程序附加到listBookByName字段。请求映射模板(接受GraphQL查询并将其转换为DynamoDB查询)如下所示:

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

然后,您的响应映射模板必须将结果整理到您的listBookByNameConnection类型中

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


我已按照链接中所述配置了设置。但它一直在返回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)
响应映射:

#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”:空 }
}

结果是我得到了空值。似乎我缺少一些配置。您的响应映射模板正在返回图书对象列表,请帮助。但是,您的输出类型是一个listBookByNameConnections对象,它包含一个属性“items”,即书籍列表。您可以尝试将listBookByName的输出类型更改为[Books],然后您的响应映射模板应该可以工作。此外,您还可以启用AppSync的日志记录以帮助您进行调试。