1

我有一个带有哈希键(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 中实现这一点。任何帮助将非常感激。

4

1 回答 1

0

您不能将 GSI 中的哈希键与表的范围键结合起来。

您需要使用散列键和范围键创建 GSI。

于 2020-09-21T20:35:32.447 回答