Запрос DynamoDB с использованием GSI и ключа диапазона

У меня есть таблица (профиль) с хеш-ключом (id), у меня есть GSI по имени и ключ диапазона по стране. Я хотел бы создать метод DAO, который будет извлекать мне все записи с заданным значением для имени и страны, примерно так: List getProfileWithNameAndCountry (name, country);

Первоначально я просто искал записи, используя только имя (GSI), используя следующий код, и он отлично работал:

Profile profile = new Profile();
profile.setCountry("name");
DynamoDBQueryExpression<Profile> queryExpression = new DynamoDBQueryExpression<Profile>()
                            .withIndexName("name-index")
                            .withHashKeyValues(profile)
                            .withConsistentRead(false);

Но теперь я хочу искать, используя как имя (GSI), так и страну (ключ диапазона). Я попытался изменить приведенный выше код на это, и это не удалось с исключением:

Profile profile = new Profile();
profile.setCountry("name");
Condition countryCondition = new Condition()
                    .withComparisonOperator(ComparisonOperator.EQ.toString())
                    .withAttributeValueList(new AttributeValue().withS(country));
DynamoDBQueryExpression<Profile> queryExpression = new DynamoDBQueryExpression<Profile>()
                            .withIndexName("name-index")
                            .withHashKeyValues(profile)
                            .withRangeKeyCondition("country", countryCondition)
                            .withConsistentRead(false);

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


person user14316615    schedule 21.09.2020    source источник


Ответы (1)


Вы не можете комбинировать хэш-ключ из GSI с ключом диапазона таблицы.

Вам нужно создать GSI как с хешем, так и с ключом диапазона.

person Charles    schedule 21.09.2020