不等于 - 范围密钥android AWS Dynamo DB

时间:2017-10-05 06:25:47

标签: android amazon-web-services amazon-dynamodb

有没有办法通过将范围键设置为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但问题相同。查看了大量文章,似乎对查询的条件运算符有许多限制。

问题是。有没有可以得到与不相等或不包含相同的结果?

2 个答案:

答案 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。

其他解决方案:

  1. 使用范围键作为属性(而非键)创建二级索引,并在该属性上使用FilterExpression。
  2. 在使用数据过滤掉不需要的值之前,请执行代码内检查