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 Puis-je interroger uniquement les valeurs d'un index GSI lorsqu'il s'agit d'un GSI avec tri Clé

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

Ce que je voudrais faire est de requête et juste Retournons tous les « Catégories » . Comme il s'agit d'un GSI et la clé de partition que j'ai entendu vous pouvez le faire, mais je ne sais pas comment.

Est-il possible ou devrais-je créer un GSI distinct sur "Catégorie" sans la clé de tri?

Merci pour votre aide.

Répondre

1

Lorsque vous ne souhaitez pas filtrer par clé. Vous devrez peut-être scanner l'index. La solution ci-dessous scanne l'index pour obtenir toute la catégorie (pas toutes les catégories distinctes).

Veuillez trouver ci-dessous le code Java pour obtenir toutes les catégories de GSI. Remplacez le nom de l'index secondaire dans le code ci-dessous en conséquence.

List<String> categoryList = new ArrayList<>(); 
    DynamoDB dynamoDB = new DynamoDB(dynamoDBClient); 
    Table table = dynamoDB.getTable("Music"); 
    Index index = table.getIndex("Secondary Index Name"); 

    ItemCollection<ScanOutcome> items = null; 
    ScanSpec scanSpec = new ScanSpec().withSelect(Select.SPECIFIC_ATTRIBUTES).withAttributesToGet("Category"); 

    items = index.scan(scanSpec); 
    Iterator<Item> pageIterator = items.iterator(); 
    while (pageIterator.hasNext()) { 

     categoryList.add(pageIterator.next().getString("Category")); 
    }