2016-05-26 6 views
0

Ich habe eine DynamoDB-Tabelle "Musik". Auf dieser hat es eine GSI mit Partition Key "Category" und Sortierschlüssel "UserRating".DynamoDB Kann ich nur die Werte eines GSI-Index abfragen, wenn es eine GSI mit Sortierschlüssel ist

Ich kann leicht als ein Beispiel für Songs abfragen, die in „Kategorie“ = „Rap“ und „Userrating“ sind = 1

Was würde ich tun Abfrage und erhalten gerade alle „Kategorien“ . Da dies ein GSI ist und der Partitionsschlüssel, den ich gehört habe, kannst du es tun, aber ich weiß nicht wie.

Ist es möglich oder muss ich eine separate GSI auf "Kategorie" ohne den Sortierschlüssel erstellen.

Danke für Ihre Hilfe.

Antwort

1

Wenn Sie nicht nach Schlüssel filtern möchten. Möglicherweise müssen Sie den Index scannen. Die folgende Lösung durchsucht den Index, um alle Kategorien (nicht alle unterschiedlichen Kategorien) zu erhalten.

Unten finden Sie den Java-Code, um die gesamte Kategorie von GSI zu erhalten. Ersetzen Sie den sekundären Indexnamen im folgenden Code entsprechend.

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