DynamoDB在GSI的同一分区键中查询多个多项

时间:2016-05-26 23:51:35

标签: android amazon-web-services amazon-dynamodb

我有一个DynamoDB表" Music"。在它上面它有一个带分区键的GSI"类别"并排序键" UserRating"。

我可以轻松地查询作为"类别"中的歌曲的示例。 =" Rap"和" UserRating" = 1

我想要做的是如何查询#34;类别" =" Rap + Rock + Jazz"和" UserRating" = 1。

这是可能的,还是我需要进行多次查询并在客户端加入?

这是我目前查询的代码:

SongDatabaseMappingAdapter songs = new SongDatabaseMappingAdapter();
            songs.setCategory("Rap");

            String userRatingQueryString = "1";

            Condition rangeKeyCondition = new Condition()
                    .withComparisonOperator(ComparisonOperator.EQ)
                    .withAttributeValueList(new AttributeValue().withN(userRatingQueryString));

            DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression()
                    .withHashKeyValues(songs)
                    .withIndexName("Category-UserRating-index")
                    .withRangeKeyCondition("UserRating", rangeKeyCondition)
                    .withConsistentRead(false);

            return mapper.query(SongDatabaseMappingAdapter.class, queryExpression);

1 个答案:

答案 0 :(得分:1)

你必须进行3次不同的通话(即'Rap,1','Rock,1'和'Jazz,1'各一次),然后在客户端合并响应。

如果CornerRadiusCategory是您桌面上的分区键和排序键(而不是GSI,就像您的情况一样),那么您可以使用{{3} API可以一次性获取数据。不幸的是,API不适用于GSI。