DynamoDBScanExpression withLimit返回的记录多于Limit

时间:2017-05-10 17:28:09

标签: amazon-dynamodb

必须列出DynamoDB表中的所有记录,而不包含任何过滤器表达式。 我想限制记录的数量,因此使用DynamoDBScanExpression和setLimit。

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
....
// Set ExclusiveStartKey
....
scanExpression.setLimit(10);

然而,扫描操作总是返回10个以上结果!!!! 这是预期的行为,如果是这样的话?

1 个答案:

答案 0 :(得分:0)

Python Answer

无法为limit操作设置scan(),但是可以通过query进行设置。

query通过items搜索数据库中的行。它从列表的顶部或底部开始,并根据设置的条件查找项目。 您必须具有分区和排序键才能执行此操作。

另一方面,扫描通过整个数据库而不是按项目进行搜索,因此,被排序。

由于查询是基于项目的,而扫描是基于 ENTIRE 数据库的,因此只有查询才能支持限制。

要回答OP的问题,本质上它是行不通的,因为您使用的是scan而不是query

以下是使用CLIENT语法使用它的示例。(更高级的语法版本。很抱歉,我没有使用resource的简单示例。 )

    def retrieve_latest_item(self):
        result = self.dynamodb_client.query(
        TableName="cleaning_company_employees",
        KeyConditionExpression= "works_night_shift = :value",
        ExpressionAttributeValues={':value': {"BOOL":"True"}},
        ScanIndexForward = False,
        Limit = 3
        )
    return result

这里是DynamoDB module docs