首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么大规模集成电路在最后一条记录上返回LastEvalutedKey?

为什么大规模集成电路在最后一条记录上返回LastEvalutedKey?
EN

Stack Overflow用户
提问于 2021-11-11 11:50:34
回答 1查看 33关注 0票数 1

我正在尝试使用LSI在dynamodb中实现分页(向前和向后)。

我已经在abc属性上创建了LSI,其类型为字符串包含格式为"https://mydomain/[A-Za-z1-9-_~]“的字符。

当我尝试向前分页时,当到达最后一条记录时,LastEvaluated键变成空,这是预期的行为,但是对于反向分页,我得到的是LastEvaluatedKey。甚至引用了文档https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-response-LastEvaluatedKey

如果我想实现向后分页,如何使用查询操作找到最后一页是什么?

我的代码

代码语言:javascript
复制
params.ScanIndexForward = false;
  response = await dynamoDb.query(paramsForQuery).promise();
  console.log('LE', response.LastEvaluatedKey);
  const arrayLength = response.Items.length;
  LastEvalSortKey = {
    pk: userId,
    originalUrl: response.Items[0].originalUrl,
  };
  if (sortBy === 'createdAt')
    LastEvalSortKey[sortBy] = response.Items[0].createdAt;
  if (sortBy === 'updatedAt')
    LastEvalSortKey[sortBy] = response.Items[0].updatedAt;
  if (sortBy === 'convertedUrl')
    LastEvalSortKey[sortBy] = response.Items[0].convertedUrl;
  return {
    items: response.Items,
    nextToken: arrayLength
      ? Base64.encodeURI(JSON.stringify(LastEvalSortKey))
      : prevToken,
    prevToken: response.LastEvaluatedKey
      ? Base64.encodeURI(JSON.stringify(response.LastEvaluatedKey))
      : undefined,
  };
EN

回答 1

Stack Overflow用户

发布于 2021-12-02 08:28:08

您链接到的文档提供了答案:

如果LastEvaluatedKey不为空,则不一定表示结果集中有更多数据。知道何时到达结果集末尾的唯一方法是当LastEvaluatedKey为空时。

知道已经结束的唯一方法是查询,直到得到一个空的LastEvaluatedKey

如果您可以保证单个页面中的数据大小不会接近1MB的查询限制,那么可以使用的一个技巧是查询(page + 1)个项。

如果查询返回page + 1项,则可以丢弃最后一项,并使用它来获知存在另一个页面。如果它返回的条目较少,而您有一个LastEvaluatedKey,那么您可以假定没有额外的数据,或者执行一个额外的单个条目查询,以检查您是否在末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69927816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档