DynamoDb get item количество условий на ключи недействительно - PullRequest
0 голосов
/ 19 января 2020

Я пытался найти объяснение этой ситуации, но я не нашел ни одного. У меня есть две таблицы DynamoDb, обе с двумя ключевыми индексами, одна - ключ HA SH, а другая - ключ RANGE.

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

  const params = {
    TableName: process.env.DYNAMODB_TABLE,
    Key: { id: sessionId },
  };
  const { Item } = await dynamoDb.get(params);

Однако та же самая операция с другой таблицей приводит к упомянутой ошибке около The number of conditions on the keys is invalid

Вот две схемы таблиц:

Это определение таблицы позволяет мне использовать упомянутый запрос.

  SessionsDynamoDbTable:
    Type: 'AWS::DynamoDB::Table'
    DeletionPolicy: Retain
    Properties:
      AttributeDefinitions:
        -
          AttributeName: userId
          AttributeType: S
        -
          AttributeName: id
          AttributeType: S
        -
          AttributeName: startDate
          AttributeType: S
      KeySchema:
        -
          AttributeName: userId
          KeyType: HASH
        -
          AttributeName: id
          KeyType: RANGE
      LocalSecondaryIndexes:
        - IndexName: byDate
          KeySchema:
          - AttributeName: userId
            KeyType: HASH
          - AttributeName: startDate
            KeyType: RANGE
          Projection:
            NonKeyAttributes:
            - endDate
            - name
            ProjectionType: INCLUDE
      BillingMode: PAY_PER_REQUEST
      TableName: ${self:provider.environment.DYNAMODB_TABLE}

Это не позволяет мне сделать запрос, подобный указанному

  SessionsTable:
    Type: 'AWS::DynamoDB::Table'
    TimeToLiveDescription:
      AttributeName: expiresAt
      Enabled: true
    Properties:
      AttributeDefinitions:
        -
          AttributeName: id
          AttributeType: S
        -
          AttributeName: expiresAt
          AttributeType: N
      KeySchema:
        -
          AttributeName: id
          KeyType: HASH
        -
          AttributeName: expiresAt
          KeyType: RANGE
      BillingMode: PAY_PER_REQUEST
      TableName: ${self:provider.environment.DYNAMODB_TABLE}

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

1 Ответ

0 голосов
/ 19 января 2020

Вы должны предоставить имя атрибута ключа раздела и одно значение для этого атрибута. Запрос возвращает все элементы с этим значением ключа раздела. При желании вы можете указать атрибут ключа сортировки и использовать оператор сравнения для уточнения результатов поиска. more

get (params, callback) ⇒ AWS .Request
Возвращает набор атрибутов для элемента с заданным первичным ключом путем делегирования AWS .DynamoDB.getItem ().

В SessionsTable id это ключ HA SH, а в SessionsDynamoDbTable id в ключе RANGE. Для SessionsDynamoDbTable вы должны предоставить ключ HA SH в дополнение к ключу RANGE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...