DynamoDB queryPage 操作与 FilterExpression 返回空结果以及 lastEvaluatedKey

man*_*nyu 5 pagination amazon-dynamodb

按照我的理解。查询操作将在提到的索引上寻找结果,直到满足以下条件之一

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

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

但我也在文档中阅读了以下内容

与 Scan 操作不同,Query 操作永远不会同时返回空结果集和 LastEvaluatedKey 值。

有人可以帮助解释上述文档声明的实际含义吗?

因为在实践中,当我使用带有限制FilterExpression 的queryPage API 时,我得到了相反的结果,即我得到了一个空集以及 LastEvaluatedKey。

我的上述理解是否正确?是否可以同时获得空结果和 lastEvaluatedKey 值?或者我错过了一些东西,因为我得到了空的结果?(根据文档,我不应该得到它。如果我没有得到空结果,那就太好了)

Wei*_*ang 2

我也遇到了和你一样的问题,阅读文档后,我发现以下描述解释了原因。根据 Amazon 文档,“在查询操作中,DynamoDB 按排序顺序检索项目,然后使用 KeyConditionExpression 和可能存在的任何 FilterExpression 处理这些项目。”

所以它解释了为什么你会得到这些结果。过滤操作是在查询结果之后进行的,所以无论是否应用FilterExpression,Query操作都没有区别,所以会看到lastEvaluatedKey,和没有应用FilterExpression的没有区别。

因此,实现您想要的唯一可能的方法是使用全局二级索引,您想要过滤的列,您可以将其作为排序键。在这种情况下,您可以使用RangeKeyCondition()进行查询。