限制和订购扫描结果AWS

时间:2017-09-05 13:18:16

标签: amazon-web-services amazon-dynamodb aws-mobilehub

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

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位用户。如果有人帮忙我会很感激。

2 个答案:

答案 0 :(得分:2)

为了实现这一目标,您需要远离扫描并使用查询操作。 查询操作为您提供了一个选项,用于指定索引是应该向前还是向后读取。 为了获得前10个结果,您需要将返回的结果限制为10.这可以通过设置查询操作的限制来完成。 因此总结一下:

  1. 开始使用查询操作而不是扫描。
  2. 将scanIndexForward设置为false以开始按降序读取结果。
  3. 设置查询操作限制以返回前10个结果。
  4. 此页面介绍了我在此答案中提到的所有内容:http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html

答案 1 :(得分:-1)

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

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

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

要评估的最大项目数(不一定是   匹配项目)。如果DynamoDB处理的项目数量最多   在处理结果时限制,它会停止操作并返回   截至该点的匹配值,以及LastEvaluatedKey中的键   适用于后续操作,以便您可以在哪里接听   离开了。此外,如果处理的数据集大小超过1 MB   DynamoDB达到此限制,它会停止操作并返回   匹配值到限制,以及LastEvaluatedKey中的键   适用于后续操作以继续操作。