我想使用DynamoDbMapper创建过滤器表达式,例如Condition A AND Condition B AND (Condition C OR Condition D OR Condition E)
。似乎DynamoDbMapper只能接受1个条件运算符(所有条件AND运算符/所有条件与OR运算符)。
是否可以使用DynamoDbMapper
来实现?
答案 0 :(得分:1)
这绝对是可能的。这是一个扫描示例,尽管它也适用于查询。本示例将查找所有价格低于10美元的书籍和所有价格高于10美元的CD。
Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":val1", new AttributeValue().withN(10));
eav.put(":val2", new AttributeValue().withS("Book"));
eav.put(":val3", new AttributeValue().withS("CD"));
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
.withFilterExpression("Price < :val1 and ProductCategory = :val2 or Price > :val1 and ProductCategory = :val3")
.withExpressionAttributeValues(eav);
List<Book> scanResult = mapper.scan(Book.class, scanExpression);
您可以通过检出Syntax for Condition Expressions来进行验证。另外,这是DynamoDBQueryExpression和DynamoDBScanExpression的相关Javadoc。