2016-05-26 1 views
0

J'ai une table DynamoDB "Music". Sur ce, il a un GSI avec la clé de partition "Catégorie" et la clé de tri "UserRating".DynamoDB interrogeant plusieurs éléments multiples dans la même clé de partition d'un GSI

Je peux interroger facilement comme un exemple pour les chansons qui sont « Catégorie » = « Rap » et « UserRating » = 1

Comment jamais ce que je voudrais faire, par exemple est des chansons de requête qui sont " Catégorie "=" Rap + Rock + Jazz "et" UserRating "= 1.

Est-ce possible ou dois-je effectuer plusieurs requêtes et les joindre côté client?

C'est le code que je suis Interrogation actuellement avec:

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); 

Répondre

1

Vous devrez faire 3 appels différents (c.-à-un pour 'Rap, 1', 'Rock, 1' et « Jazz, 1 '), puis fusionnez la réponse du côté client.

Si Category et UserRating étaient partition clés et le tri-clé sur votre table (et non sur le GSI, comme votre cas), alors vous pourriez avoir utilisé l'API BatchGetItem pour obtenir vos données en une seule fois. Malheureusement, l'API ne fonctionne pas sur les GSI.