используя 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
Не понятно, в чем моя ошибка? Мысли?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Кажется, что здесь пошло не так, так это то, что вы используете операцию Get клиента Dynamodb, указывая только хэш-ключ. Поскольку в вашей таблице есть ключ диапазона (ключ сортировки), вы также должны указать это в запросе Getitem Если вы хотите искать записи только с помощью хэш-ключа, вы должны использовать операцию запроса. параметры = { ИмяТаблицы: 'eventLogTable', KeyConditionExpression: '#deviceId = :deviceId' }; DynamoDB.DocumentClient.query (параметры,
Это просто, просто укажите пару значений ключа с отметкой времени в разделе «Ключ».
дело в том, что у меня нет метки времени, я запрашиваю элементы для определенного идентификатора устройства, метка времени может быть чем угодно
Да, именно поэтому я специально попросил вас использовать операцию Query, для которой требуется только хеш-ключ. Посмотрите на это.
client.get принимает параметр DynamoDB.DocumentClient.GetItemInput и не имеет поля KeyConditionExpression. Исходя из этого, я не вижу, как добавить поле KeyConditionExpression в объект params. Я вижу код, похожий на мой, в docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/….