【发布时间】:2018-05-24 17:10:24
【问题描述】:
我想扫描我的 Dynamo 数据库表并应用分页。在我的请求中,我想从我希望分页开始的地方发送号码。说,例如我正在发送 start = 3 和 limit = 10 的请求,其中 start 是我希望从表中的第三个项目开始扫描,并且限制最多 10 个项目。限制但是我可以使用 .withLimit() 方法来实现(我正在使用 java)。我关注了this aws 文档。以下是我想要实现的代码:
<Map<String, AttributeValue>> mapList = new ArrayList<>();
AmazonDynamoDB client =AmazonDynamoDBClientBuilder.standard().build();
Gson gson = new GsonBuilder().serializeNulls().create();
Map<String, AttributeValue> expressionAttributeValues = new
HashMap<String,AttributeValue>();
expressionAttributeValues.put(":name",
newAttributeValue().withS(name));
List<ResponseDomain> domainList = new ArrayList<>();
ResponseDomain responseDomain = null;
//lastKeyEvaluated = start
Map<String, AttributeValue> lastKeyEvaluated = null;
do {
ScanRequest scanRequest = new
ScanRequest().withTableName(STUDENT_TABLE)
.withProjectionExpression("studentId, studentName")
.withFilterExpression("begins_with(studentName, :name)")
.withExpressionAttributeValues(expressionAttributeValues).
withExclusiveStartKey(lastKeyEvaluated);
ScanResult result = client.scan(scanRequest);
for (Map<String, AttributeValue> item : result.getItems()) {
responseDomain = gson.fromJson(gson.toJson(item),
ResponseDomain.class);
domainList.add(responseDomain);
} lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated!= null);
//lastKeyEvaluated = size
return responseDomain;
在上面的代码中,我被困在 3 个地方:
- 如何将 lastKeyEvaluated 设置为我的起始值,即 3
- 在 while 条件下如何指定我的限制,即 10
- 当我尝试将项目从 Json 映射到我的域类时,我遇到了错误。
我是在误解 dynamodb 中的分页概念还是在代码中做错了什么。任何指导都将受到高度赞赏,因为我是新手。
【问题讨论】:
标签: json database amazon-web-services pagination amazon-dynamodb