Zec*_*ide 4 pagination amazon-web-services nosql amazon-dynamodb
使用javascript aws-sdk并通过文档客户端查询dynamodb表。该表包含10个元素,查询限制= 5。
对于每个请求,我使用LastEvaluatedKey生成一个新查询并发送一个新请求,结果如下:
first request --> {Items: Array(5), Count: 5, ScannedCount: 5, LastEvaluatedKey: {…}}
second request --> {Items: Array(5), Count: 5, ScannedCount: 5, LastEvaluatedKey: {…}}
third request --> {Items: Array(0), Count: 0, ScannedCount: 0}
Run Code Online (Sandbox Code Playgroud)
根据这份文件
如果结果包含LastEvaluatedKey元素,请继续执行步骤2。 如果结果中没有LastEvaluatedKey,则没有其他要检索的项目
它应该在第二个请求中不返回LastEvaluatedKey,因为没有更多的元素,但是它在第三个请求中返回一个发送到空结果的元素。
当我尝试使用limit = 4时,一切都会按预期进行
first request --> {Items: Array(4), Count: 4, ScannedCount: 4, LastEvaluatedKey: {…}}
second request --> {Items: Array(4), Count: 4, ScannedCount: 4, LastEvaluatedKey: {…}}
third request --> {Items: Array(2), Count: 2, ScannedCount: 2} <--- there is no LastEvaluatedKey as expected
Run Code Online (Sandbox Code Playgroud)
那么这里发生了什么?
您所看到的是预期的。
这句话是对的:
如果结果中没有LastEvaluatedKey,则没有其他要检索的项目
但是,您似乎假设它暗示逆条件也成立,但事实并非如此……
如果没有其他要检索的项目,则结果#false中没有LastEvaluatedKey
这不是第一条语句所暗示的,在逻辑上不是等效的,也不是正确的。
如果该服务正好达到您的限制,那么它将不知道是否可能找到更多匹配的记录,因此它将为您提供最后一条经过评估的记录,以便您可以继续搜索下一个请求。可能会有更多,可能没有。这是为了尽快将结果返回给您而进行的优化的必然结果。否则,该服务将需要继续寻找至少一个匹配项,即使已找到足以满足您限制的匹配项。
如果搜索没有达到您的限制而到达末尾,则表明没有其他要搜索的内容,因此不会返回LastEvaluatedKey。
| 归档时间: |
|
| 查看次数: |
2060 次 |
| 最近记录: |