Ошибка получения элемента Dynamodb

используя javascript aws sdk

мое определение таблицы выглядит следующим образом:

  resources:
  Resources:
    ImagesTable:
      Type: "AWS::DynamoDB::Table"
      Properties:
        AttributeDefinitions:
          - AttributeName: "deviceId"
            AttributeType: "S"
          - AttributeName: "timeStamp"
            AttributeType: "N"
        KeySchema:
          - AttributeName: "deviceId"
            KeyType: "HASH"
          - AttributeName: "timeStamp"
            KeyType: "RANGE"
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:custom.settings.${self:custom.myStage}.ITEMS_DYNAMODB_TABLE}
        StreamSpecification:
          StreamViewType: NEW_IMAGE

Я пытаюсь выполнить запрос и получить все устройства, соответствующие строке.

мой объект параметров

        const params: DynamoDB.DocumentClient.GetItemInput = {
          TableName: eventLogTable,
          Key: {deviceId: 'device12345'}
        };

мой звонок

return this.client.get(params).promise()
        .then(result => {
            return result;
        });

в файлах журнала я вижу следующую ошибку:

2019-06-21T17:23:27.878Z    cc865442-8604-4f5c-8099-72eba87d9b2b    query params right before going in { TableName: 'sls-basic-operations-items-dev',
Key: { deviceId: 'device12345' } }
2019-06-21T17:23:27.904Z    cc865442-8604-4f5c-8099-72eba87d9b2b    { ValidationException: The provided key element does not match the schema

Не понятно, в чем моя ошибка? Мысли?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что здесь пошло не так, так это то, что вы используете операцию Get клиента Dynamodb, указывая только хэш-ключ. Поскольку в вашей таблице есть ключ диапазона (ключ сортировки), вы также должны указать это в запросе Getitem Если вы хотите искать записи только с помощью хэш-ключа, вы должны использовать операцию запроса. параметры = { ИмяТаблицы: 'eventLogTable', KeyConditionExpression: '#deviceId = :deviceId' }; DynamoDB.DocumentClient.query (параметры,

client.get принимает параметр DynamoDB.DocumentClient.GetItemInput и не имеет поля KeyConditionExpression. Исходя из этого, я не вижу, как добавить поле KeyConditionExpression в объект params. Я вижу код, похожий на мой, в docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/….

reza 21.06.2019 20:37

Это просто, просто укажите пару значений ключа с отметкой времени в разделе «Ключ».

vishnu prasad 21.06.2019 20:52

дело в том, что у меня нет метки времени, я запрашиваю элементы для определенного идентификатора устройства, метка времени может быть чем угодно

reza 21.06.2019 20:59

Да, именно поэтому я специально попросил вас использовать операцию Query, для которой требуется только хеш-ключ. Посмотрите на это.

vishnu prasad 21.06.2019 21:03

Другие вопросы по теме