我正在使用DynamoDBMapper进行课程,让我们说" User" (用户名是主键),其上有一个字段,表示"状态"。它是一个Hash + Range键表,每当用户的状态发生变化(变化非常罕见)时,我们就会在表中添加一个新条目以及时间戳(即范围键)。要获取当前状态,这就是我正在做的事情:
DynamoDBQueryExpression expr =
new DynamoDBQueryExpression(new AttributeValue().withS(userName))
.withScanIndexForward(false).withLimit(1);
PaginatedQueryList<User> result =
this.getMapper().query(User.class, expr);
if(result == null || result.size() == 0) {
return null;
}
for(final User user : result) {
System.out.println(user.getStatus());
}
由于某种原因,这是打印用户迄今为止所拥有的所有状态。我已将scanIndexForward
设置为false,因此它按降序排列,我将限制设为1
。我希望这会返回表中该用户名的最新单条目。
然而,当我甚至查看相同的电子日志时,我看到返回了大量的条目,远远超过1.现在,我正在使用:
final String currentStatus = result.get(0).getStatus();
我在这里想要理解的是,在这种情况下,withLimit
条款的重点是什么,或者我做错了什么?
答案 0 :(得分:6)
2013年3月,AWS forums用户抱怨同样的问题。
亚马逊的代表派他使用queryPage函数。
似乎没有为元素保留限制,而是对单个API调用中检索的元素块进行限制,而queryPage可能有所帮助。
您还可以查看pagination loading strategy configuration
此外,您可以随时为团队open a Github issue。