我正在尝试运行一个DynamoDB查询,该查询说我想要不是以特定值开头的项目。我似乎找不到办法。
我尝试了以下4种评估方式,但没有一种有效。每个人都会给我一个无效的操作员错误。
我尝试的我的 KeyConditionExpression 如下:
!begins_with(gameScoreId, :scoreScore) AND !begins_with(gameScoreId, :scoreLevel) AND userId = :userId
<>begins_with(gameScoreId, :scoreScore) AND <>begins_with(gameScoreId, :scoreLevel) AND userId = :userId
NOT begins_with(gameScoreId, :scoreScore) AND NOT begins_with(gameScoreId, :scoreLevel) AND userId = :userId
begins_with(gameScoreId, :scoreScore) = false AND begins_with(gameScoreId, :scoreLevel) = false AND userId = :userId
如果删除not运算符,则会出现此错误:
KeyConditionExpressions每个键只能包含一个条件
在dynamodb中有办法吗?
答案 0 :(得分:0)
看起来关键条件表达式不支持NOT begins_with(x)
。这可能是因为结果集不连续(是x
之前的项目,与x
之后的项目汇总)。
一些可能的解决方案是:
gameScoreId
设置为非关键属性(或将其复制到新的非关键属性中),然后可以在userId
上进行查询,并在gameScoreId
上进行过滤(您可以无法过滤关键属性),或者答案 1 :(得分:0)
.withFilterExpression("NOT begins_with(hashKey, :hKey)")
.withExpressionAttributeValues(ImmutableMap.of(
":hKey", new AttributeValue().withS("somePrefix:")))
使用过滤器表达式时,这似乎对我有用。我认为您的问题更多是在一键上使用更多条件。