gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:01:17 26 4
gpt4 key购买 nike

我正在尝试使用字符串集过滤查询结果。我的字符串集由国家/地区组成。

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

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

“地点”是我要检查的列的名称。

我知道这样做的一种方法是使用多个 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);

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

关于带有字符串集的 Android DynamoDB 过滤表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39543404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com