首页 > 解决方案 > 如何使用扫描或任何 dynamodb 方法实现分页功能?

问题描述

我看到这可以用来限制结果的显示。使用dynamodb npm 库。

Account.scan().limit(10).exec(printResults);

但是我如何告诉扫描方法从特定记录开始呢?基本上我需要的是getAll我的自定义数据库访问层的方法。我找到了该getItems方法,但它需要索引来加载模型。所以它只加载特定的模型。我需要对所有记录进行分页。

标签: node.jsnpmamazon-dynamodb

解决方案


来自 dynamodb文档

单次扫描仅返回符合 1 MB 大小限制的结果集。要确定是否有更多结果并一次检索一页,应用程序应执行以下操作:

  1. 检查低级 Scan 结果:如果结果包含 LastEvaluatedKey 元素,则继续执行步骤 2。如果结果中没有 LastEvaluatedKey,则没有要检索的项目。

  2. 构造一个新的 Scan 请求,参数与前一个相同。但是,这一次,从步骤 1 中获取 LastEvaluatedKey 值,并将其用作新 Scan 请求中的 ExclusiveStartKey 参数。

  3. 运行新的扫描请求。

  4. 转到步骤 1。

从您的链接中查看 dynamodb npm...

 // Load 20 accounts
Account
  .scan()
  .limit(20)
  .exec();

// Load All accounts, 20 at a time per request
Account
  .scan()
  .limit(20)
  .loadAll()
  .exec();

但看起来startKey可能直接对应ExclusiveStartKey

// Start scan using start key
Account
  .scan()
  .where('age').notNull()
  .startKey('foo@example.com')
  .exec()

推荐阅读