我正在尝试使用字符串集过滤查询结果。我的字符串集由国家组成。
基本上,在执行查询之后,我希望过滤器查看字符串集的内容,然后只显示国家/地区在字符串集中的结果。这可能吗?这是我的代码:
String[] countries = { "Japan", "Vietnam", "Thailand"};
Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
eav.put(":val2", new AttributeValue().withSS(countries));
DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression()
.withFilterExpression("Place IN (:val2)") // this is the line i'm confused about
.withExpressionAttributeValues(eav)
.withHashKeyValues(someHashValue);
// Results of query should only show those with Place = Japan, Vietnam, or Thailand
其中“Place”是我要检查的列的名称。
我知道这样做的一种方法是使用多个OR语句来检查。但是,我希望此过滤器与任何字符串集大小兼容,因此看起来OR语句不是可行的方法。
我完全赞赏任何指导。提前谢谢!
答案 0 :(得分:0)
一件事 - StringSet是DynamoDB项目字段的值类型,而不是可以用来同时查询多个事物的值。
我环顾四周,发现了一些优雅的设计方法,但它们已被弃用了。我建议您自己构建查询字符串。例如......
String[] countries = {"Japan", "Vietnam", "Thailand"};
List<String> queries = new ArrayList<>();
Map<String, AttributeValue> eav = new HashMap<>();
for (Integer i = 0; i < countries.length; i++) {
String placeholder = ":val" + i;
eav.put(placeholder, new AttributeValue().withS(countries[i]));
queries.add("Place = " + placeholder);
}
String query = String.join(" or ", queries);
DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression()
.withFilterExpression(query)
.withExpressionAttributeValues(eav)
.withHashKeyValues(someHashValue);
我还没有测试过,但这是你要做的事情(除非有更好的方式,我还没有看到)。