我正在尝试使用Java aws-sdk版本1.11.140的DynamoDBScanExpression withLimit为1
即使我使用.withLimit(1),即
List<DomainObject> result = mapper.scan(new DynamoDBScanExpression().withLimit(1));
返回所有条目的列表,即7.我做错了什么?
P.S。我尝试使用cli进行此查询和
aws dynamodb scan --table-name auditlog --limit 1 --endpoint-url http://localhost:8000
只返回1个结果。
答案 0 :(得分:0)
DynamoDBMapper.scan将返回PaginatedScanList - 当用户执行需要它们的操作时,按需加载分页结果。某些操作(例如size())必须获取整个列表,但在可能的情况下逐页延迟获取结果。
因此,DynamoDBScanExpression上设置的limit
参数是每页要提取的最大项目数。
因此,在您的情况下,返回PaginatedList,当您执行PaginatedList.size时,它会尝试从Dynamodb加载所有项目,在每个页面上加载1个项目(每个页面是对DynamoDb的获取请求)直到它到达PaginatedList的末尾。
由于您只对第一个结果感兴趣,因此在不从Dynamo获取所有7个项目的情况下获得该结果的好方法是:
Iterator it = mapper.scan(DomainObject.class, new DynamoDBScanExpression().withLimit(1)).iterator();
if ( it.hasNext() ) {
DomainObject dob = (DomainObject) it.next();
}
使用上面的代码,只有第一个项目将从dynamodb中获取。
需要注意的是:DynamoDBQueryExpression中的limit
参数仅用于分页目的。它是每页商品数量的限制,而不是可以请求的页数限制。