关于亚马逊网络服务:DynamoDB 当它是具有排序键的 GSI 时,我可以只查询 GSI 索引的值吗

DynamoDB Can I query just the values of a GSI Index when it is a GSI with sort Key

我有一个 DynamoDB 表"音乐"。在此它有一个 GSI,其分区键为 "Category" 和排序键 "UserRating"。

作为示例,我可以轻松查询 "Category" = "Rap" 和 "UserRating" = 1

中的歌曲

我想做的是查询并取回所有"类别"。因为这是一个 GSI 和分区键,我听说你可以做到,但我不知道怎么做。

我是否可以或是否必须在没有排序键的情况下在"类别"上创建单独的 GSI。

感谢您的帮助。


当您不想按键过滤时。您可能需要扫描索引。以下解决方案是扫描索引以获取所有类别(不是所有不同的类别)。

请在下面找到 Java 代码以从 GSI 获取所有类别。相应地替换以下代码中的二级索引名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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"));
    }