2016-05-26 2 views
0

У меня есть таблица DynamoDB «Музыка». На этом он имеет GSI с ключом раздела «Категория» и ключ сортировки «UserRating».DynamoDB Могу ли я запросить только значения индекса GSI, когда он является GSI с сортировкой. Ключ

я могу запросить легко, как, например, для песен, которые находятся в «категории» = «Rap» и «UserRating» = 1

То, что я хотел бы сделать, это запрос и просто получить обратно все «Категории» , Поскольку это GSI и ключ раздела, я слышал, что вы можете это сделать, но я не уверен, как это сделать.

Возможно ли это, или мне нужно создать отдельный GSI на «Категория» без ключа сортировки.

Благодарим за помощь.

ответ

1

Если вы не хотите фильтровать ключ. Вам может потребоваться отсканировать индекс. В приведенном ниже решении сканируется индекс, чтобы получить всю категорию (не всякая отдельная категория).

Ниже приведен код Java, чтобы получить всю категорию из GSI. Замените вторичное имя индекса в приведенном ниже коде соответственно.

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")); 
    } 
Смежные вопросы