如何在DynamoDB中的主键上使用begin_with方法?

时间:2016-09-20 09:58:11

标签: amazon-web-services amazon-dynamodb

我有2个属性id(字符串,主键),值(字符串)。 当我尝试使用KeyConditionExpression时,它会抛出查询密钥条件不受支持

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

this链接我知道我们只能在主键上使用EQ操作。我怎样才能实现这个目标

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

我需要使用begin_with或contains来过滤所以我采用了以下方法。

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

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

构建的

PK将为所有行设置常量值。所以KeyConditionExpression就像。

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

注意:但仍然包含不能使用KeyConditionExpression。我认为它已从KeyConditionExpression

中删除

3 个答案:

答案 0 :(得分:8)

在指定主键的EQ条件后,您只能使用范围键begins_withcontains

要使用带有主键的EQ,您可以

KeyConditionExpression: "ID = :tagIDValue"

答案 1 :(得分:2)

我不同意Tolbahady关于begins_withcontains仅在范围键中有效的声明。您可以使用方法scan在任何键中使用任何比较运算符。扫描是一种进行动态查询的灵活但昂贵且低效的方式。

无论如何,有一个名为AWS NoSQL Workbench的工具。它有点像MySQL Workbench。这样做的好处是,您可以在检查访问模式(针对表的应用程序的可能和最常用的查询)的同时构造表。

答案 2 :(得分:0)

我将不惜一切代价避免扫描,在这种情况下,我将创建一个全局二级索引。 GSI上的主键不需要唯一性,您可以查询唯一性。存储很便宜,您可能可以使用额外的密钥。