作者:feileide2011_108 | 来源:互联网 | 2022-12-06 12:29
我正在尝试从GSI获取记录,但遇到了麻烦。
API架构:
type DriverInfos {
id: String!
status: Int
lastLat: Float
lastLng: Float
idDriver: String # GSI
}
type Query {
getDriverInfosByDriver(idDriver: String): DriverInfos
}
解析器:
{
"version" : "2017-02-28",
"operation" : "Query",
"index" : "idDriver-index",
"query" : {
## Provide a query expression. **
"expression": "#idDriver = :idDriver",
"expressionNames" : {
"#idDriver" : "idDriver"
},
"expressionValues" : {
":idDriver" : {
"S" : "${ctx.args.idDriver}"
}
}
}
}
查询:
query getDriverInfosByDriver{
getDriverInfosByDriver(idDriver: "1")
{
idDriver
status
lastLat
lastLng
}
}
返回:
{
"data": {
"getDriverInfosByDriver": {
"idDriver": null,
"status": null,
"lastLat": null,
"lastLng": null
}
}
}
GSI已很好激活:名称:“ idDriver-index”-PartitionKey:idDriver(字符串)尝试使用其他ID:2,3,...
看来它来自解析器。我尝试使用其他解析器,但始终返回错误。
预先感谢您的回答。
1> mparis..:
问题是查询操作总是返回一组结果,而不仅仅是一组结果。如果要保留这样的查询类型:
type Query {
getDriverInfosByDriver(idDriver: String): DriverInfos
}
那么您应该将响应映射模板更改为此:
#if($ctx.result.items.size() > 0)
$util.toJson($ctx.result.items[0])
#else
null
#end
相反,如果getDriverInfosByDriver查询应返回多个信息对象,则应将架构更改为:
type DriverInfo {
id: String!
status: Int
lastLat: Float
lastLng: Float
idDriver: String # GSI
}
type DriverInfoConnection {
items: [DriverInfo]
nextToken:String
}
type Query {
getDriverInfosByDriver(idDriver: String): DriverInfoConnection
}
然后,您可以将响应映射模板保留为默认值:
$util.toJson($ctx.result)
然后像这样查询它
query getDriverInfosByDriver{
getDriverInfosByDriver(idDriver: "1") {
items {
idDriver
status
lastLat
lastLng
}
}
}