java - DynamoDB 的 withLimit 子句与 DynamoDBMapper.query

标签 java amazon-dynamodb

我正在为一个类使用 DynamoDBMapper,假设“用户”(用户名是主键),它上面有一个字段,上面写着“状态”。它是一个 Hash+Range key 表,每当用户的状态发生变化(变化极少)时,我们都会在表中添加一个新条目以及时间戳(这是 range key)。要获取当前状态,这就是我正在做的:

    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一位用户提示了同样的问题。

Amazon 的代表派他使用 queryPage 函数。

似乎没有为元素保留限制,而是对单个 API 调用中检索的元素 block 的限制,queryPage 可能会有所帮助。

您还可以查看 pagination loading strategy configuration

此外,您可以随时 open a Github issue为团队。

关于java - DynamoDB 的 withLimit 子句与 DynamoDBMapper.query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21623637/

相关文章:

java - 在 Java REST 中将字符串转换为 JSON

amazon-web-services - Dynamodb 自动缩放 terraform 导入

amazon-web-services - Dynamo DB : global secondary index, 稀疏索引

java - 复合索引是否支持索引字段前缀的匹配?

java - 如何在android中用粗体文本替换强标签之间的内容

java - 如何获取前台运行的Android应用程序的Activity实例?

java - 如何将参数添加到数组的末尾?

amazon-web-services - 如何设计关键模式以使每个应用程序只有一个 DynamoDB 表?

amazon-web-services - 如何加入 AWS DynamoDB 中的表?

java - DynamoDB - DynamoDBMapper 查询并获取整个结果集