Serverless и GlobalSecondaryIndexes - условие запроса пропущено ключевой элемент схемы с DynamodB - PullRequest
0 голосов
/ 13 мая 2019

Я пытался создать GlobalSecondaryIndexes без сервера и запросить его позже.При этом я получаю ошибку

Query condition missed key schema element: id

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

  var params = {
    TableName: process.env.DYNAMODB_TABLE_LIGHTHOUSE,
    KeyConditionExpression: 'fetchDate = :fetchDate',
    ExpressionAttributeValues: {
      ':fetchDate': { S: '2019-05-13' }
    }
  };

  const dbResult = await dynamoDb.query(params).promise()
  console.log(dbResult)

Это серверная часть для DynamodB.Наверное, здесь чего-то не хватает?

DynamoDbTableExpenses:
  Type: 'AWS::DynamoDB::Table'
  Properties:
    AttributeDefinitions:
      -
        AttributeName: id
        AttributeType: S
      -
        AttributeName: fetchDate
        AttributeType: S
    KeySchema:
      -
        AttributeName: id
        KeyType: HASH
    GlobalSecondaryIndexes:
      - IndexName: fetchDateIndex
        KeySchema:
          - AttributeName: fetchDate
            KeyType: HASH
        Projection:
          ProjectionType: ALL
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
    ProvisionedThroughput:
      ReadCapacityUnits: 1
      WriteCapacityUnits: 1
    TableName: ${self:provider.environment.DYNAMODB_TABLE_LIGHTHOUSE}

В веб-интерфейсе это выглядит так:

enter image description here

1 Ответ

2 голосов
/ 13 мая 2019

Вам необходимо добавить атрибут IndexName.Попробуйте:

var params = {
    TableName: process.env.DYNAMODB_TABLE_LIGHTHOUSE,
    IndexName: 'fetchDateIndex',
    KeyConditionExpression: 'fetchDate = :fetchDate',
    ExpressionAttributeValues: {
      ':fetchDate': '2019-05-13'
    }
};

См. API-запрос

Операция Query находит элементы на основе значений первичного ключа.Вы можете запросить любую таблицу или вторичный индекс с составным первичным ключом (ключом раздела и ключом сортировки).

...