对全球二级索引的 AppSync 查询
AppSync query on Global Secondary Index
我正在尝试从 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
}
}
Return :
{
"data": {
"getDriverInfosByDriver": {
"idDriver": null,
"status": null,
"lastLat": null,
"lastLng": null
}
}
}
GSI 激活良好:名称:"idDriver-index" - PartitionKey:idDriver(字符串)
尝试使用其他 ID:2、3、...
好像是解析器来的。我尝试使用不同的解析器,但它总是 return 错误。
预先感谢您的回答。
问题是查询操作总是 return 是一组结果,而不仅仅是一个。如果您想保留这样的查询类型:
type Query {
getDriverInfosByDriver(idDriver: String): DriverInfos
}
那么您应该将响应映射模板更改为:
#if($ctx.result.items.size() > 0)
$util.toJson($ctx.result.items[0])
#else
null
#end
如果 getDriverInfosByDriver 查询应该 return 多个信息对象,那么您应该将架构更改为:
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
}
}
}
我正在尝试从 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
}
}
Return :
{
"data": {
"getDriverInfosByDriver": {
"idDriver": null,
"status": null,
"lastLat": null,
"lastLng": null
}
}
}
GSI 激活良好:名称:"idDriver-index" - PartitionKey:idDriver(字符串) 尝试使用其他 ID:2、3、...
好像是解析器来的。我尝试使用不同的解析器,但它总是 return 错误。
预先感谢您的回答。
问题是查询操作总是 return 是一组结果,而不仅仅是一个。如果您想保留这样的查询类型:
type Query {
getDriverInfosByDriver(idDriver: String): DriverInfos
}
那么您应该将响应映射模板更改为:
#if($ctx.result.items.size() > 0)
$util.toJson($ctx.result.items[0])
#else
null
#end
如果 getDriverInfosByDriver 查询应该 return 多个信息对象,那么您应该将架构更改为:
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
}
}
}