Я пытался найти объяснение этой ситуации, но я не нашел ни одного. У меня есть две таблицы 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}
Я включаю определение всей таблицы, потому что не знаю, могут ли вторичные индексы иметь влияние или нет на эту проблему.