NodeJS 单表设计DynamoDB问题,限制查询参数

v64noz0r  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(117)

我希望能够限制在每个查询中获取的fetch元素,但我在这里面临以下问题:
由于我在DynamoDB中使用了单表设计,因此这里我只得到了四项:

如果我检查DynamoDB中的前10个元素,我会注意到我在这里获取计数,而不管我在扫描操作

中过滤的项目是什么

async paginate<TEntity>(
    limit = 10,
    start_key: any
    TableName = $env.MAIN_TABLE
  ): Promise<Paginate<TEntity>> {
    Assert.ok(TableName)
    const items= await this.instance.scan({
       TableName
       Limit: limit,
       ExclusiveStartKey: start_key,
       FilterExpression: 'contains(PK, :PK)',
       ExpressionAttributeValues: {
         ':PK': 'QUIZ#'
       }
    })
    return items
  }

这里有谁知道解决这个问题的方法吗?

yptwkmov

yptwkmov1#

您正在使用Limit=10执行Scan,并提供FilterExpression,这意味着DynamoDB将首先读取前10个项目,然后评估FilterExpression并返回该批10个项目中的哪个项目评估为True。
First line of docs
单个扫描操作最多读取设置的最大项数(如果使用Limit参数)或最多1 MB的数据,然后使用FilterExpression对结果应用任何筛选。如果响应中存在LastEvaluatedKey,则需要对结果集进行分页。有关详细信息,请参阅Amazon DynamoDB开发人员指南中的对结果进行分页。

底线是您需要分页以实现10个项目。

我的建议是,在需要contains来查找分区键的地方,永远不要对数据建模

相关问题