有没有办法通过将范围键设置为NOT EQUAL值来查询AWS DynamoDB。
我希望以下代码可以使用:
Condition rangeKey = new Condition()
.withComparisonOperator(ComparisonOperator.NE)
.withAttributeValueList(new
AttributeValue().withS(TestArray[0]));
conditionHashMap.put("ID", rangeKey);
queryExpression
.withIndexName("Index Key")
.withHashKeyValues(KEYVALUE)
.withRangeKeyConditions(conditionHashMap)
.withConsistentRead(false);
但它总是会引发以下错误:
Attempted conditional constraint is not an indexable operation
尝试将ComparisonOperator更改为NOT_CONTAINS但问题相同。查看了大量文章,似乎对查询的条件运算符有许多限制。
问题是。有没有可以得到与不相等或不包含相同的结果?
答案 0 :(得分:0)
NOT EQUALS 无法在KeyConditionExpression
上用于RANGE键。但是,您可以使用FilterExpression
上的NOT EQUALS条件作为RANGE键。
示例: - 强>
在下面的示例中,我正在寻找带分区键的电影' 2014'和范围键不等于“大新电影”#39;同样,您可以为您的方案做。
QuerySpec querySpec = new QuerySpec();
querySpec.withKeyConditionExpression("yearkey = :yearval").withFilterExpression("title <> :titleval")
.withValueMap(new ValueMap().withNumber(":yearval", 2014).withString(":titleval", "The Big New Movie"));
答案 1 :(得分:0)
虽然@notionquest的声明Not Equals不能在KeyConditionExpression中使用,但可以在FilterExpression中使用是正确的,但他提出的解决方案是错误的。无法在表的哈希或范围键上使用FilterExpressions。
其他解决方案: