当前位置: 首页 > 知识库问答 >
问题:

DynamoDB queryPage操作与Filter表达式返回空结果以及lastEvalue atedKey

朱丰
2023-03-14

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

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

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

但我也在留档里读到以下内容

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

有人能帮我解释一下上面的文档声明到底是什么意思吗?

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

我的上述理解是否正确?有可能同时得到空结果和lastEvalue atedKey值?或者我错过了什么,因为我得到了空的结果?(按留档我不应该得到它。如果我没有得到空的结果就太好了)

共有2个答案

葛玉堂
2023-03-14

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

潘兴朝
2023-03-14

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

所以它解释了为什么你会得到这些结果。过滤操作是在查询结果之后处理的,因此无论是否应用FilterExpression,查询操作都没有区别,这就是为什么显示lastEvaluatedKey的原因,它与未应用FilterExpression的键没有区别。

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

 类似资料:
  • 在使用lambda表达式返回字符串列表时,我得到了以下字符串: null 和更多的建议。但没有答案对我有帮助。 有人知道这段代码出了什么问题吗?

  • 我不断地得到错误 在终端上编译时。 在switch语句的末尾。这是在用终端编译的时候。

  • 问题内容: 我正在使用JDBC来实现非常简单的数据库连接。 我已经创建了连接/语句并执行了查询。我在调试器中检查语句的查询对象,以确认它正在发送正确的查询。然后,我再次检查了数据库中的查询(直接从调试器复制),以确保其返回数据。但是,返回的结果集在.next()上给出false 这里有我遗漏的常见陷阱吗? 还有myDB类(一个简单的包装程序,使我可以将连接/语句代码放入任何项目中) 编辑:根据建议

  • 方法返回空结果。我正在尝试使用Spring-boot、h2数据库和JPA来实现rest服务。 下面是我的 我的文件包括: 实体: 接口:

  • 赋值 计算赋值 多重赋值 范围表达式 and or not 条件操作符 例: 1+2*3/4 为了便于编程,有些方法调用和控制结构是以操作符的形式出现的。Ruby语言中有下列操作符。 高 :: [] +(单项) ! ~ ** -(单项) * / % + - << >>

  • 我试图学习在Java8中使用lambda表达式的方法引用,但遇到了一些我无法完全理解的东西。 使用lambda表达式(而不是创建接口等),是否有更干净的方法来完成此操作?