【问题标题】:How to limit the number of items from an AWS DynamoDB scan?如何限制 AWS DynamoDB 扫描的项目数量?
【发布时间】:2021-10-29 05:58:10
【问题描述】:

我正在使用 node.js。

如果你看这个例子:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html

上面写着:

aws dynamodb scan \
    --table-name Movies \
    --projection-expression "title" \
    --filter-expression 'contains(info.genres,:gen)' \
    --expression-attribute-values '{":gen":{"S":"Sci-Fi"}}' \
    --page-size 100  \
    --debug

其中page-size 限制了结果项的数量:

通常,AWS CLI 会自动处理分页;但是,在此示例中,CLI 的 --page-size 参数限制了每页的项目数。

但如果您阅读 Node.js AWS 文档:

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#scan-property

没有与“页面大小”相关的参数。

(仅Limit 限制正在扫描的项目数量,不返回)。

如何限制退回商品的数量(满足我的条件)?

【问题讨论】:

  • 不能保证经过过滤后得到N个项目。在扫描请求完成后应用过滤器。您将收到的项目数取决于过滤器,并且可能为零(即使在这种情况下 LastEvaluatedKey 可能仍表示可能有更多项目要检索,因此返回的零项目不是表示没有更多的项目)。

标签: node.js amazon-web-services amazon-dynamodb


【解决方案1】:

您好像误读了文档,

限制结果集中的项目数

Scan 操作允许您限制它在结果中返回的项目数。 为此,请将 Limit 参数设置为您想要的最大项目数。

例如,假设您扫描一个限制值为 6 且没有过滤器表达式的表。 Scan 结果将包含表中与请求中的关键条件表达式匹配的前六个项目。

现在假设您向 Scan 添加过滤器表达式。在这种情况下,DynamoDB 会将过滤器表达式应用于返回的六个项目,丢弃不匹配的项目。最终的扫描结果将包含 6 个或更少的项目,具体取决于过滤的项目数。

在同一个链接上,

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html

希望对你有帮助。

【讨论】:

  • 嘿。它说“在这种情况下,DynamoDB 会将过滤器表达式应用于返回的六个项目”——因此它返回 6,然后应用过滤器。我要返回 6 件,满足筛选条件。
【解决方案2】:
aws dynamodb scan \
    --table-name Movies \
    --projection-expression "title" \
    --filter-expression 'contains(info.genres,:gen)' \
    --expression-attribute-values '{":gen":{"S":"Sci-Fi"}}' \
    --page-size 100  \
    --debug

您认为这样做是什么:“读取整个表,找到满足过滤条件的行,然后返回最多 100 行”

Dynamo 做了什么:“读取 100 行,找到满足过滤条件的行,然后返回”

我认为你需要一个索引 :)

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 2016-10-15
    • 2019-09-25
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多