Запрос AppSync по глобальному вторичному индексу
Я пытаюсь получить запись от 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 (String) Попробуйте с другими идентификаторами: 2, 3, ...
Кажется, это исходит от решателя. Я пробовал с другим распознавателем, но он всегда возвращает ошибку.
Заранее благодарю за ответы.
1 ответ
Проблема в том, что операция Query всегда возвращает набор результатов, а не только один. Если вы хотите оставить свой тип запроса следующим образом:
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
}
}
}