弹簧数据 mongo 在条件不区分大小写



我有带有字符串字段的对象,我想搜索所有适合(不区分大小写(我的数组的对象与字符串列表。

例如

public class Person { 
private String name;
}
List<String> list = Arrays.asList("teSt1", "tEsT2");

我可以创建这样的条件:

Criteria.where("name").in(list);

但我不知道如何使其不区分大小写(用正则表达式连接(

感谢您的任何帮助

您可以在 in(( 方法中传递 Pattern 列表而不是字符串来实现此目的。

import java.util.regex.Pattern;

Criteria.where("name").in(list.stream().map(s->Pattern.compile(s,Pattern.CASE_INSENSITIVE)).collect(Collectors.toList());

如果您想要完全匹配而不是类似的搜索,您可以尝试这样的事情。

Criteria.where("name").in(list.stream().map(s->Pattern.compile("^"+s+"$",Pattern.CASE_INSENSITIVE)).collect(Collectors.toList()));

这添加了开头为和结尾为的正则表达式,这使其与不区分大小写完全匹配。

我认为不可能以这种方式构建它

db.getCollection('collection').find( { "field" : { "$in" : [{"$regex": '...', "$options": "i"}] } })

像这样的查询返回错误,我想出了非常非常不是最佳的解决方案,但有效。只需为所有列表值构建正则表达式条件并将其与 OR 连接,例如:

Criteria orCriteria = new Criteria();
Criteria[] regExList = new Criteria[list.size()];   
IntStream.range(0, list.size()).forEach(i -> {
regExList[i] = Criteria.where("field").regex(list.get(i), "i");
});
orCriteria.orOperator(regExList);

最新更新