我正在为一个类使用DynamoDBMapper,比如说“用户”(用户名是主键),上面有一个字段,上面写着“状态”。它是一个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
子句的重点是什么,还是我做错了什么? 最佳答案
2013年3月,用户在AWS forums上抱怨了同样的问题。
来自亚马逊的代表派他使用queryPage函数。
似乎没有保留元素的限制,而是限制了在单个API调用中检索到的元素块的限制,而queryPage可能会有所帮助。
您也可以查看pagination loading strategy configuration
另外,您可以随时为团队添加open a Github issue。