Динамодб получает элемент с ошибкой - PullRequest
0 голосов
/ 21 июня 2019

с использованием 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

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

мой объект params

        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

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

1 Ответ

2 голосов
/ 21 июня 2019

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

...