使用DynamoDbMapper进行过滤器表达的多个AND和OR条件

时间:2018-12-13 09:09:21

标签: amazon-dynamodb

我想使用DynamoDbMapper创建过滤器表达式,例如Condition A AND Condition B AND (Condition C OR Condition D OR Condition E)。似乎DynamoDbMapper只能接受1个条件运算符(所有条件AND运算符/所有条件与OR运算符)。

是否可以使用DynamoDbMapper来实现?

1 个答案:

答案 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来进行验证。另外,这是DynamoDBQueryExpressionDynamoDBScanExpression的相关Javadoc。