我正在为一个类使用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

10-06 16:12