Запросить таблицу Dynamodb по первичному ключу

У меня проблемы с созданием простого запроса. Здесь показан пример как сделать запрос с использованием глобального вторичного индекса. В этом случае у меня есть только первичный ключ, и я хочу запросить его из своей таблицы. В настоящее время я получаю сообщение об ошибке:

Query condition missed key schema element: id

Вот что я сейчас пытаюсь:

var params = {
  TableName : "XactRemodel-7743-DynamoDBImagesTable-8183NQ0UG0Y5",
  KeyConditionExpression: 'HashKey = :hkey',
  ExpressionAttributeValues: {
    ':hkey': event.projectId
  }
};
documentClient.query(params, function(err, data) {
   if (err) {
     console.log(err)
   } else {
     console.log(data);
   }
});

Я знаю, что в примере они использовали indexName, который соответствует имени вторичного индекса. В их схеме ключей, похоже, нет такого атрибут.

Вот как выглядит моя таблица, определенная в файле YAML:

DynamoDBImagesTable:
Type: AWS::DynamoDB::Table
Properties:
  BillingMode: PAY_PER_REQUEST
  SSESpecification:
    SSEEnabled: true
  PointInTimeRecoverySpecification:
    PointInTimeRecoveryEnabled: true
  AttributeDefinitions:
    - AttributeName: id
      AttributeType: S
    - AttributeName: companyId
      AttributeType: S
    - AttributeName: lastModified
      AttributeType: S
  KeySchema:
    - AttributeName: id
      KeyType: HASH
  GlobalSecondaryIndexes:
    - IndexName: companyId-index
      KeySchema:
        - AttributeName: companyId
          KeyType: HASH
        - AttributeName: lastModified
          KeyType: RANGE
      Projection:
        ProjectionType: ALL

Что мне не хватает?


person Felipe Centeno    schedule 11.06.2019    source источник


Ответы (1)


Это пытается сделать запрос по первичному ключу с именем HashKey:

KeyConditionExpression: 'HashKey = :hkey',

Однако ваш первичный ключ называется id, на что указывает сообщение об ошибке. Так что измените эту строку на:

KeyConditionExpression: 'id = :hkey',
person Mark B    schedule 11.06.2019
comment
Знаешь, сейчас это кажется таким очевидным ... ????‍♂️, я почему-то подумал, что это относится к типу ключа. Что ж, большое спасибо! - person Felipe Centeno; 11.06.2019
comment
Было бы неправильно предположить, что это тот случай, когда вы действительно должны использовать _ 1_, а не query()? Или это имеет значение? - person Michael - sqlbot; 12.06.2019
comment
@ Michael-sqlbot, оглядываясь на это, я считаю, что ты прав. Get () должен сделать всю работу, и это немного проще - person Felipe Centeno; 11.07.2019