我有一个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);
答案 0 :(得分:1)
你必须进行3次不同的通话(即'Rap,1','Rock,1'和'Jazz,1'各一次),然后在客户端合并响应。
如果CornerRadius
和Category
是您桌面上的分区键和排序键(而不是GSI,就像您的情况一样),那么您可以使用{{3} API可以一次性获取数据。不幸的是,API不适用于GSI。