Я использую безсерверный фреймворк с dynamicodb [in Local].пытаясь сделать запрос со вторичными индексированными полями.Цель состоит в том, чтобы выполнить запрос с помощью нескольких ключей, как мы делаем в базовых запросах поиска в Mongo: {url:'<Somevalue>'}
или может быть таким {url:<somevalue>,ha:<somevalue>}
Конфигурация таблицы, которую я использую в настоящее время:
serverless.yml
resources:
Resources:
TableName:
Type: 'AWS::DynamoDB::Table'
Properties:
TableName: ${file(./serverless.js):Tables.TableName.name}
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: 'id'
AttributeType: 'S'
- AttributeName: 'url'
AttributeType: 'S'
- AttributeName: 'ha'
AttributeType: 'S'
- AttributeName: 'GSI_1_PK'
AttributeType: 'S'
- AttributeName: 'GSI_1_SK'
AttributeType: 'S'
KeySchema:
- AttributeName: 'id'
KeyType: 'HASH'
GlobalSecondaryIndexes:
- IndexName: 'GSI_1'
KeySchema:
- AttributeName: 'GSI_1_PK'
KeyType: 'HASH'
- AttributeName: 'GSI_1_SK'
KeyType: 'RANGE'
Projection:
ProjectionType: 'ALL'
- IndexName: 'URI_1'
KeySchema:
- AttributeName: 'url'
KeyType: 'HASH'
Projection:
ProjectionType: 'ALL'
- IndexName: 'HASH_1'
KeySchema:
- AttributeName: 'ha'
KeyType: 'HASH'
Projection:
ProjectionType: 'ALL'
Outputs:
TableNameARN:
Value: { 'Fn::GetAtt': [TableName, Arn] }
Export:
Name: ${file(./serverless.js):Exports.TableNameARN}
с этим, в настоящее время я могу искать только с полем id
,
Q :
1> Какие изменения необходимо внести, чтобы запросить разные поля?[который вторично индексируется без использования id
в запросе]
2> Как выполнять поиск с несколькими атрибутами?[то есть: {url:<somevalue>,ha:<somevalue>}
]
Запрос, который я использую:
var params = {
TableName: '<TableName>',
IndexName:'URI_1',
Key: {
url: 'http://something.com'
}
};
docClient.get(params, function(err, data) {
if (err) ppJson(err); // an error occurred
else ppJson(data); // successful response
});
Вывод запроса:
{
message:"One of the required keys was not given a value",
code:"ValidationException,
...
}