DynamoDBScanExpression withLimit 返回的记录多于 Limit

azm*_*zmi 5 amazon-dynamodb

必须列出 DynamoDB 表中的所有记录,没有任何过滤器表达式。我想限制记录数,因此将 DynamoDBScanExpression 与 setLimit 一起使用。

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
....
// Set ExclusiveStartKey
....
scanExpression.setLimit(10);
Run Code Online (Sandbox Code Playgroud)

但是,扫描操作总是返回 10 多个结果!!!!这是预期的行为吗?如果是,如何?

Gun*_*t.r 0

Python Answer

无法limitscan()操作设置 a,但是可以使用 a 来设置query

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

另一方面,扫描会搜索整个数据库而不是按项目,因此不会排序

由于查询是基于项目的,而扫描是基于整个数据库的,因此只有查询可以支持限制。

要回答OP的问题,本质上它不起作用,因为你使用的是scannot 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
Run Code Online (Sandbox Code Playgroud)

这是DynamoDB 模块文档