根据我的理解。 查询操作将在上述索引中搜索结果,直到满足以下条件之一
因此,DynamoDB查询将按照上述条件获取结果,然后它将应用FilterExpression,因此它很可能不会向您返回任何结果,因此它将返回空集和LastEvaluatedKey
但我也在documentation
中阅读了以下内容与扫描操作不同,查询操作永远不会返回空结果集和LastEvaluatedKey值。
有人可以帮助解释上述文件陈述的实际含义吗?
因为在实践中,当我使用限制和 FilterExpression queryPage API时,我正在反对它,即我得到一个空集以及LastEvaluatedKey。
我的上述理解是否正确?可以获得空结果和lastEvaluatedKey值吗?或者我错过了一些因为我得到空洞的结果? (根据文件我不应该得到它。如果我没有得到空的结果会很棒)
答案 0 :(得分:0)
我也在努力解决与您相同的问题,在阅读完文档后,我发现以下说明解释了原因。根据亚马逊文档,"在查询操作中,DynamoDB按排序顺序检索项目,然后使用KeyConditionExpression和可能存在的任何FilterExpression处理项目。"
所以它解释了为什么你得到这些结果。在查询结果之后处理过滤器操作,因此无论您是否应用FilterExpression,查询操作都没有区别,这就是为什么您看到lastEvaluatedKey被呈现的原因,并且它与一个没有区别。不应用FilterExpression。
因此,实现所需内容的唯一可行方法是使用全局二级索引,即要筛选的列,可以将其作为排序键。在这种情况下,您可以使用LandgeKeyCondition()查询。
答案 1 :(得分:0)
他们已经更新了文档,并且文档与您的经验保持一致。 从问题中的文档链接: 注意: 如果从结果页面读取的所有项目都被过滤掉,则Query操作可以返回空结果集和LastEvaluatedKey。