我正在使用AWS mobilehub,我创建了一个dynamoDb表(userId
,username
,usertoplevel
,usertopscore
)。
我的分区键是一个字符串(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位用户。如果有人帮忙我会很感激。
答案 0 :(得分:2)
为了实现这一目标,您需要远离扫描并使用查询操作。 查询操作为您提供了一个选项,用于指定索引是应该向前还是向后读取。 为了获得前10个结果,您需要将返回的结果限制为10.这可以通过设置查询操作的限制来完成。 因此总结一下:
此页面介绍了我在此答案中提到的所有内容: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中的键 适用于后续操作以继续操作。