Earlier this year, Amazon announced support for query filters for non-key attributes.
Is it possible to combine conditions on one attribute value? For example, in this scenario, I would like to get all the elements that do not match a specific list of values ββin a single non-key column.
Their documentation states that each condition can contain only one attribute value for comparisons of type NOT_EQUALS or BEGINS_WITH . Therefore, the following does not work:
HashMap<String, Condition> queryFilter = new HashMap<String, Condition>(); List<AttributeValue> AttributeValues = new ArrayList<AttributeValue>(); AttributeValues.add(new AttributeValue().withS("someValue1")); AttributeValues.add(new AttributeValue().withS("someValue2")); Condition attributeCondition = new Condition() .withComparisonOperator(ComparisonOperator.NE) .withAttributeValueList(AttributeValues); queryFilter.put("COLUMN_1", attributeCondition); DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>() .withHashKeyValues(itemKey) .withQueryFilter(queryFilter) .withLimit(pPageSize);
It seems that only the comparison operator IN can contain a list of attribute values. Ideally, should these conditions be related to each other? Since the query filter is a hash map, we cannot put several conditions in the same column (I tried):
Condition c1 = new Condition() .withAttributeValueList(new AttributeValue().withS("someValue1")) .withComparisonOperator(ComparisonOperator.NE); Condition c2 = new Condition() .withAttributeValueList(new AttributeValue().withS("someValue2")) .withComparisonOperator(ComparisonOperator.NE); DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>() .withHashKeyValues(itemKey) .withConditionalOperator(ConditionalOperator.AND) .withQueryFilterEntry("COLUMN_1", c1) .withQueryFilterEntry("COLUMN_1", c2) .withLimit(pPageSize);
Any help or clarification would be greatly appreciated!
thanks
java amazon-web-services nosql amazon-dynamodb
ben.bourdin
source share