0

我正在使用 AWS mobilehub,并创建了一个 dynamoDb 表(userId、、、、username)。我的分区键是一个字符串 ( ),我创建了一个全局搜索索引 (GSI),我在其中设置了分区键和排序键。我可以通过以下代码成功查询所有项目usertoplevelusertopscoreuserIdusertoplevelusertopscore

final DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
            List<UserstopcoreDO> results;
            DynamoDBMapper mapper = AWSMobileClient.defaultMobileClient().getDynamoDBMapper();
            results = mapper.scan(UserstopcoreDO.class, scanExpression);
            for (UserstopcoreDO usertopScore : results) {
                Logger.d("SizeOfUserScore : " + usertopScore.getUsertopscore());
            }

现在我的表中有 1500 多条记录,我想将结果限制为仅获取前 10 个用户。如果有人帮助,我将不胜感激。

4

2 回答 2

3

为了实现这一点,您需要远离 Scan 并使用 Query 操作。查询操作为您提供了一个选项来指定是否应该正向或反向读取索引。为了获得前 10 个结果,您需要将返回的结果限制为 10 个。这可以通过对查询操作设置限制来完成。因此总结一下:

  1. 开始使用查询操作而不是扫描。
  2. 将 scanIndexForward 设置为 false 以开始按降序读取结果。
  3. 对查询操作设置限制以返回前 10 个结果。

此页面描述了我在此答案中提到的所有内容:http: //docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html

于 2017-09-05T22:20:32.480 回答
-1

可以在扫描表达式中设置限制请仔细阅读 LIMIT 的定义。它是要评估的最大项目数的限制。但是,如果扫描中没有使用过滤器表达式,您不必担心。

如果您使用过滤器表达式,您可能需要进行递归扫描,直到 LastEvaluatedKey 为空。

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression().withLimit(10);

要评估的最大项目数(不一定是匹配项目的数量)。如果 DynamoDB 在处理结果时处理的项目数达到了限制,它会停止操作并返回到该点的匹配值,并返回 LastEvaluatedKey 中的一个键以应用于后续操作,以便您可以在您需要的地方选择离开了。此外,如果在 DynamoDB 达到此限制之前处理的数据集大小超过 1 MB,它会停止操作并返回匹配值直至限制,并在 LastEvaluatedKey 中应用一个键以在后续操作中应用以继续操作。

于 2017-09-05T14:43:03.867 回答