Explore Courses Blog Tutorials Interview Questions
0 votes
in AWS by (19.1k points)

Earlier this year Amazon announced the support of query filters on non-key attributes. 

Can conditions be combined on a single attribute value? For example, in this scenario, I would like to retrieve all items which do not match a certain list of values in a single 'non-key' column. 

Their documentation states that each condition can only hold one attribute value for comparisons like NOT_EQUALS or BEGINS_WITH. The following therefore 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()




queryFilter.put("COLUMN_1", attributeCondition);


DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()




It looks like only the IN comparison operator can hold a list of attribute values. Ideally, these conditions should be chainable? Since the query filter is a hash map we cannot put multiple conditions on the same column (I've tried): 

Condition c1 = new Condition()

    .withAttributeValueList(new AttributeValue().withS("someValue1"))



Condition c2 = new Condition()

    .withAttributeValueList(new AttributeValue().withS("someValue2"))



DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()



    .withQueryFilterEntry("COLUMN_1", c1)

    .withQueryFilterEntry("COLUMN_1", c2)


Any help or clarification would be greatly appreciated!

1 Answer

0 votes
by (44.4k points)

Check this DynamoDB documentation for more information, so use the latest AWS SDK for JAVA.

It would look like this:

Map<String, AttributeValue> expressionAttributeValues = new HashMap<String, AttributeValue>();

expressionAttributeValues.put(":val1", new AttributeValue().withS("someValue1"));

expressionAttributeValues.put(":val2", new AttributeValue().withS("someValue2"));


DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()


    .withFilterExpression("COLUMN_1 <> :val1 AND COLUMN_1 <> :val2")



Related questions

0 votes
1 answer

Want to get 50% Hike on your Salary?

Learn how we helped 50,000+ professionals like you !

Browse Categories