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

正在查询DynamoDB

曹智
2023-03-14

我有一个DynamoDB表,其中有一个字母数字字符串作为哈希键(例如“D4ED6962-3EC2-4312-A480-96ECBB48C9DA”)。我需要根据表中的另一个字段查询该表,因此我需要我的查询选择所有键,例如我的字段x在dat x和date y之间。

我知道我需要在哈希键上设置一个条件,在范围键上设置另一个条件,但是我很难编写一个不将查询绑定到特定ID的哈希键条件。

我以为我可以使用一个基于ID为NOT_NULL的冗余条件,但当我使用它时,我得到了错误:

不支持查询键条件

下面是我正在使用的条件,有什么想法如何实现这个目标吗?

 Condition hashKeyCondition = new Condition()
 .withComparisonOperator(ComparisonOperator.NOT_NULL.toString());

Condition rangeCondition = new Condition()
.withComparisonOperator(ComparisonOperator.BETWEEN.toString())
.withAttributeValueList(new AttributeValue().withS(dateFormatter.print(lastScanTime())), 
new AttributeValue().withS(dateFormatter.print(currentScanTime)));

Map<String, Condition> keyConditions = new HashMap<String, Condition>();
keyConditions.put("userId", hashKeyCondition);
keyConditions.put("lastAccesTime", rangeCondition);

提前感谢大家的帮助。

共有2个答案

端木冷勋
2023-03-14

NOT_NULL比较运算符对于哈希键条件无效。查询上哈希键条件的唯一有效运算符是EQ。欲了解更多信息,请访问:http://docs.aws.amazon.com/amazondynamodb/latest/apireference/api_query.html

这意味着查询将无法工作,至少在当前构造表时是如此。您可以使用扫描操作,也可以创建一个单独的表,按日期(哈希)和用户ID(范围)存储数据。

祝你好运!

寿子默
2023-03-14

在DynamoDB中,您可以使用3个API获得项目:

.扫描(灵活但昂贵),

.Query(灵活性较低:必须指定哈希,但开销较小)

.GetItem(按散列,如果表中有散列,则按范围)

实现你想要的目标的唯一方法是:

>

  • 使用扫描,速度慢或昂贵。

    使用另一个表(B)作为前一个表(A)的索引,如:

    b.hash=“values”b.range=userid
    b.lastAccessTime=lastAccessTime(带有辅助索引)

    现在,您必须在写操作时维护该索引,但您可以将其与查询操作一起使用,以获取用户标识。查询B:hash='values',lastaccessTime介于x和y之间,选择UserID。

    希望这有帮助。

  •  类似资料:
    • 本文向大家介绍详解MySql基本查询、连接查询、子查询、正则表达查询,包括了详解MySql基本查询、连接查询、子查询、正则表达查询的使用技巧和注意事项,需要的朋友参考一下 查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过不同的查询方式,可以获得不同的数据。MySQL中是使用SELECT语句来查询数据的。在这

    • 我正在尝试使用query-更新行(删除列str_column中的连字符和连字符后的所有字符)- 但上面的查询是删除匹配的行而不是更新。 我不明白,如何更新查询可以删除行??

    • 我正在连接到mysql服务器并进行查询。我一直得到一个ER_BAD_FIELD_ERROR:'field list'中的未知列

    • 我正在尝试获取与登录用户在同一年级的同学列表。 我有这个功能 但我得到了错误: 原因:异常[EclipseLink-6069](Eclipse Persistence Services-2.5.0.V20130507-3FAAC2B):org.Eclipse.Persistence.exceptions.QueryException异常说明:此表达式中的字段[Rocnik.IdRocnik]在此上

    • 我正在为我的音频/视频播放器应用程序提供Android 11支持。实际上,我主要担心的是,谷歌部落不允许玩家应用程序访问所有文件。我不希望我的应用在谷歌商店发布时被拒绝。 在以前的API中,我使用的是权限,包括Android 10(我选择退出作用域存储)。不过,我不知道如何处理Android11,而不让我的应用在谷歌商店上发布时遭到拒绝。我了解到查询记录需要权限,我有以下问题: 谷歌(当我在他们的

    • 我在客户端传递一个网址作为http://xyz.org/audio?s=0.8717912845313549