DynamoDB的withLimit子句与DynamoDBMapper.query

Roh*_*bhu 4 java amazon-dynamodb

我正在使用DynamoDBMapper作为一个类,让我们说"User"(用户名是主键),其上有一个字段,上面写着"Status".它是一个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());
    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这是打印用户迄今为止所拥有的所有状态.我已设置scanIndexForward为false,因此它按降序排列,并且我设置了限制1.我希望这会返回表中该用户名的最新单项.

然而,当我甚至查看相同的电线日志时,我看到返回了大量的条目,远远超过1.现在,我正在使用:

final String currentStatus = result.get(0).getStatus();
Run Code Online (Sandbox Code Playgroud)

我在这里想要理解的是,withLimit在这种情况下,条款的重点是什么,或者我做错了什么?

Che*_*rel 6

2013年3月,在AWS论坛上,用户抱怨同样的问题.

亚马逊的代表派他使用queryPage函数.

似乎没有为元素保留限制,而是限制在单个API调用中检索的元素块,并且queryPage可能有所帮助.

您还可以查看分页加载策略配置

此外,您始终可以为团队打开Github问题.