我有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
中删除答案 0 :(得分:8)
在指定主键的EQ条件后,您只能使用范围键begins_with
和contains
。
要使用带有主键的EQ,您可以
KeyConditionExpression: "ID = :tagIDValue"
答案 1 :(得分:2)
我不同意Tolbahady关于begins_with
和contains
仅在范围键中有效的声明。您可以使用方法scan
在任何键中使用任何比较运算符。扫描是一种进行动态查询的灵活但昂贵且低效的方式。
无论如何,有一个名为AWS NoSQL Workbench的工具。它有点像MySQL Workbench。这样做的好处是,您可以在检查访问模式(针对表的应用程序的可能和最常用的查询)的同时构造表。
答案 2 :(得分:0)
我将不惜一切代价避免扫描,在这种情况下,我将创建一个全局二级索引。 GSI上的主键不需要唯一性,您可以查询唯一性。存储很便宜,您可能可以使用额外的密钥。