使用FilterExpression返回空结果的DynamoDB queryPage操作以及lastEvaluatedKey

时间:2016-04-28 10:48:22

标签: pagination amazon-dynamodb

根据我的理解。 查询操作将在上述索引中搜索结果,直到满足以下条件之一

  • 结果集已用完。
  • 检索到的项目数达到Limit参数的值(如果已指定)。
  • 检索的数据量达到最大结果集大小限制为1 MB。 记录Here

因此,DynamoDB查询将按照上述条件获取结果,然后它将应用FilterExpression,因此它很可能不会向您返回任何结果,因此它将返回空集和LastEvaluatedKey

但我也在documentation

中阅读了以下内容
  

与扫描操作不同,查询操作永远不会返回空结果集和LastEvaluatedKey值。

有人可以帮助解释上述文件陈述的实际含义吗?

因为在实践中,当我使用限制 FilterExpression queryPage API时,我正在反对它,即我得到一个空集以及LastEvaluatedKey。

我的上述理解是否正确?可以获得空结果和lastEvaluatedKey值吗?或者我错过了一些因为我得到空洞的结果? (根据文件我不应该得到它。如果我没有得到空的结果会很棒)

2 个答案:

答案 0 :(得分:0)

我也在努力解决与您相同的问题,在阅读完文档后,我发现以下说明解释了原因。根据亚马逊文档,"在查询操作中,DynamoDB按排序顺序检索项目,然后使用KeyConditionExpression和可能存在的任何FilterExpression处理项目。"

所以它解释了为什么你得到这些结果。在查询结果之后处理过滤器操作,因此无论您是否应用FilterExpression,查询操作都没有区别,这就是为什么您看到lastEvaluatedKey被呈现的原因,并且它与一个没有区别。不应用FilterExpression。

因此,实现所需内容的唯一可行方法是使用全局二级索引,即要筛选的列,可以将其作为排序键。在这种情况下,您可以使用LandgeKeyCondition()查询。

答案 1 :(得分:0)

他们已经更新了文档,并且文档与您的经验保持一致。 从问题中的文档链接: 注意: 如果从结果页面读取的所有项目都被过滤掉,则Query操作可以返回空结果集和LastEvaluatedKey。