我希望能够限制在每个查询中获取的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
}
这里有谁知道解决这个问题的方法吗?
1条答案
按热度按时间yptwkmov1#
您正在使用
Limit=10
执行Scan
,并提供FilterExpression
,这意味着DynamoDB将首先读取前10个项目,然后评估FilterExpression并返回该批10个项目中的哪个项目评估为True。First line of docs
单个扫描操作最多读取设置的最大项数(如果使用Limit参数)或最多1 MB的数据,然后使用FilterExpression对结果应用任何筛选。如果响应中存在LastEvaluatedKey,则需要对结果集进行分页。有关详细信息,请参阅Amazon DynamoDB开发人员指南中的对结果进行分页。
底线是您需要分页以实现10个项目。
我的建议是,在需要contains来查找分区键的地方,永远不要对数据建模