I have a working DynamoDb query, but I'm trying to add an IN operator and can't figure out the syntax for the FilterExpression.
pages
is a List<Integer> and I have an attribute in my table which is an Integer, so I'm doing something like this
attrValues.put(":pages", AttributeValue.fromL(pages.stream()
.map(i->AttributeValue.fromN(i.toString()))
.collect(Collectors.toList())));
String filterExpression = "in(originalPageNumber, :pages)"
final QueryRequest.Builder queryBuilder = QueryRequest.builder()
.tableName(Parameters.addPrefix(TABLE_NAME))
.keyConditionExpression(keyConditionExpression)
.expressionAttributeNames(attrNameAlias)
.expressionAttributeValues(attrValues)
.filterExpression(filterExpression);
(this is not the complete code. Just the relevant parts)
But it doesn't like my syntax at all. I've tried originalPageNumber in :pages
and other variations as well.
Update
Other things I tried
Tried setting :pages
to
final String pagesStr = pages.stream().map(i -> i.toString()).collect(Collectors.joining(", ", "(", ")"));
final AttributeValue pagesAttr = AttributeValue.fromS(pagesStr);
attrValues.put(":pages", pagesAttr);
or AttributeValue(S=(1, 2))
I then got rid of :pages
altogether and just set filterExpression to in(originalPageNumber, (1, 2))
. Still no luck.
Also tried originalPageNumber in (1, 2)