带字符串集的Android DynamoDB过滤表达式

带字符串集的Android DynamoDB过滤表达式,android,amazon-dynamodb,Android,Amazon Dynamodb,我正在尝试使用字符串集筛选查询结果。我的琴弦是由国家组成的 基本上,在执行查询之后,我希望过滤器查看字符串集的内容,然后只显示字符串集中的国家的结果。这可能吗?以下是我的代码: String[] countries = { "Japan", "Vietnam", "Thailand"}; Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>(); eav.put(":val2", new

我正在尝试使用字符串集筛选查询结果。我的琴弦是由国家组成的

基本上,在执行查询之后,我希望过滤器查看字符串集的内容,然后只显示字符串集中的国家的结果。这可能吗?以下是我的代码:

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
String[]国家={“日本”、“越南”、“泰国”};
Map eav=newhashmap();
eav.put(“:val2”,新的AttributeValue()。带有(国家));
DynamoDBQueryExpression queryExpression=新建DynamoDBQueryExpression()
.withFilterExpression(“placein(:val2)”//这是我感到困惑的一行
.带有表达式属性值(eav)
.WithHashKeyValue(someHashValue);
//查询结果应仅显示Place=日本、越南或泰国的结果
其中“Place”是我要检查的列的名称

我知道这样做的一种方法是使用多个OR语句进行检查。但是,我希望这个过滤器能够与任何字符串集大小兼容,因此似乎OR语句都不适合


我非常感谢任何指导。提前谢谢

一件事-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);
String[]国家={“日本”、“越南”、“泰国”};
列表查询=新建ArrayList();
Map eav=newhashmap();
for(整数i=0;i

我还没有测试过它,但这正是您想要做的事情(除非有更好的方法,我还没有看到)。

一件事-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);
String[]国家={“日本”、“越南”、“泰国”};
列表查询=新建ArrayList();
Map eav=newhashmap();
for(整数i=0;i

我还没有测试过它,但这是您正在考虑做的事情(除非有更好的方法,我还没有看到)。

Trey,非常感谢您的帮助!手动构建查询字符串与我的设计配合得很好。我使用的唯一区别是我不想使用.join方法,因为它需要导入另一个库,所以我只是使用另一个for循环手动组合字符串和附加的OR。谢谢崔伊!真的很感激!特雷,非常感谢你的帮助!手动构建查询字符串与我的设计配合得很好。我使用的唯一区别是我不想使用.join方法,因为它需要导入另一个库,所以我只是使用另一个for循环手动组合字符串和附加的OR。谢谢崔伊!真的很感激!