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

如何在DynamoDB的主键上使用begins\u with方法?

邹坚壁
2023-03-14

我有带有2个属性id(string,主键),value(string)的Table。当我尝试跟随KeyHarditionExpress时,它会抛出不支持的查询键条件。

KeyConditionExpression: "begins_with(ID, :tagIDValue)" 
                        or
KeyConditionExpression: "contains(ID, :tagIDValue)"

从这个链接中,我知道我们只能在主键上使用EQ操作。我怎么才能做到这一点

解决方案:======================================================

我需要使用begins\u with或contains进行筛选,所以我采用了以下方法。

表属性:PK(partion_key、字符串)、ID(排序键、字符串)、值(字符串)。

现在,我的主键是基于PK,ID构建的

PK将为所有行提供常量值。所以KeyConditionExpression将是这样的。

KeyConditionExpression: "PL = :pk  and begins_with(ID, :tagIDValue)"

注意:但仍包含不使用KeyConditionExpression。我认为它已从KeyConditionExpression中删除

共有3个答案

狄信然
2023-03-14

我会不惜一切代价远离扫描,在这种情况下,我会创建一个全局辅助索引。GSI上的主键不需要唯一性,您可以查询它。存储很便宜,您可能可以使用额外的键。

洪浩波
2023-03-14

我不同意Tolbahady关于以开头且包含仅在范围键中可用的声明。您可以使用methodscan在任何键中使用任何比较运算符。扫描是执行dynamodb查询的一种灵活但昂贵且低效的方法。

无论如何,有一个名为AWS非关系型数据库工作台的工具。它有点像MySQL工作台。它的好处是,您可以在构建表的同时检查您的访问模式(应用程序对您的表的可能和最常用的查询)。

闻人鸿文
2023-03-14

在为主键指定EQ条件后,您可以仅对范围键使用“以开头”和“包含”。

要将EQ与主键一起使用,可以执行以下操作

KeyConditionExpression: "ID = :tagIDValue"
 类似资料:
  • 我正在使用DocumentClient进行查询。并将无服务器框架与DynamoDb结合使用。 我试图查询BEGINS_WITH不提供任何主键。 以下是我的数据: 这是我的无服务器。yml[我猜是表格配置]: 问:使用DocumentCareet,我想查询的前几个元素。这将返回所有文档,即匹配。就像在这种情况下,我想查询,它会返回 目前我的查询如下所示[这给出错误][在本地DynamoDB JS s

  • 给定以下代码,如果给定表的排序键没有以“account\uu”开头的排序键,我希望防止重复: 如上所述,如果已经存在PK,我需要防止重复,或者更具体地说,如果PK和SK不以“account\uu0”开头,我需要防止重复。无论我尝试什么,我都会不断得到重复的PK记录。

  • 我正在我们的项目中实施DynamoDB。我们必须将大型数据字符串放入数据库中,所以我们将数据拆分为小块,并插入多行,其中只有一个属性值发生了更改—这是字符串的一部分。一列(范围键)包含多个零件。插入和选择数据对于大小字符串都非常有效。问题是删除项目。我了解到,当您想要删除某个项时,需要为该项指定主键(哈希键或哈希键和范围键-取决于表)。但如果我想删除对其中一个属性具有特定值的项目,该怎么办?我是否

  • 我基本上是试图将数据从一个服务器上的表复制到另一个服务器上。 我在服务器上有两个相同的数据库。我创建了一个名为opentickets_aux1的外表来表示主服务器上辅助服务器上的open票证表。两者都有一个事件号主键。我可以很好地访问外表中的数据,但是当我尝试以下SQL时,我得到了“错误:没有与ON CONFLICT规范匹配的唯一或排除约束” 如果主键存在,我想更新几列。我将此语句用于其他查询,当

  • 我有一个用JPA和Spring Data DynamoDB建立的Spring项目。它工作正常。我可以通过分区键和排序键(称为DynamoDBHashKey和DynamoDBRangeKey)读取DynamoDB表中的项。 我的问题是,我的存储库的设置方式是使用查询和扫描操作来读取表,而不是使用获取项目操作,这应该会更高效。 这是我的实体: 这是我的存储库: 当我的表同时具有分区键和排序键时,如何配

  • 根据此链接: DynamoDB上支持的操作 “只能查询具有复合主键(分区键和排序键)的表。” 但这似乎并不正确。我在DynamoDB中有一个名为“users”的表,该表的主键只包含一个属性“username”。 而且我能够在NodeJS中仅使用“username”属性上的“KeyConditionExpression”查询该表。请参见以下内容: } 这段代码运行得很好。所以我想知道文档是否有误,或