我有带字符串字段的对象,我想用字符串列表搜索所有适合(不区分大小写)数组的对象。
例如
public class Person {
private String name;
}
List<String> list = Arrays.asList("teSt1", "tEsT2");
我可以创建如下条件:
Criteria.where("name").in(list);
但我不知道如何使其不区分大小写(将其与regex连接)
感谢您的帮助
答案 0 :(得分:0)
我认为不可能以这种方式构建
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);