AppSync DynamoDb, при условии, что ключевой элемент не соответствует схеме - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь создать пользовательский тип запроса в AppSync для запроса в поле, отличном от идентификатора по умолчанию.

Примечание. У меня нет настроенного ключа сортировки или глобального вторичного индекса.

Источник данных подключен к таблице DynamoDB GameStats.Запись существует в таблице, но когда я запрашиваю, я получаю «Предоставленный ключевой элемент не соответствует схеме».

query getGameByMeetupId {
  getGameByMeetupId(meetupId: "259028625") {
    name
    field
    year
    month
  }
}

Запрос: getGameByMeetupId(meetupId: String): GameStats

Шаблон сопоставления запросов:

    {
        "version": "2017-02-28",
        "operation": "GetItem",
        "key": {
            "meetupId": $util.dynamodb.toDynamoDBJson($ctx.args.meetupId)
        }
    }

Шаблон сопоставления ответов: $utils.toJson($ctx.result)

Сообщение об ошибке:

{
  "data": {
    "getGameByMeetupId": null
  },
  "errors": [
    {
      "path": [
        "getGameByMeetupId"
      ],
      "data": null,
      "errorType": "DynamoDB:AmazonDynamoDBException",
      "errorInfo": null,
      "locations": [
        {
          "line": 2,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: MC71RFG6U85PBICS2OA714TLB7VV4KQNSO5AEMVJF66Q9ASUAAJG)"
    }
  ]
}

1 Ответ

0 голосов
/ 04 марта 2019

Чтобы использовать DynamoDB Query, вам необходимо указать значение ключа раздела.

Вы упомянули, что ваша таблица имеет атрибут 'id по умолчанию'.Это твой ключ раздела?Если это так, у вас есть два варианта:

1) Измените Query на Scan и укажите фильтр для атрибута meetupId

2) Добавьте GSI, установивmeetupId в качестве ключа раздела, а затем обновите Query, для которого вы уже нацелены на GSI, а не на базовую таблицу

...