如何查询不区分大小写,并包含与Spring MongoTemplate



>我在MongoDB中有这样的JSON文档

{
"os" : "Windows 10"
}
{
"os" : "WINDOWS 8"
}
{
"os" : "UBunTu 18.04"
}

如何使用Spring MongoTemplate查询不区分大小写的os和包含,以便我可以传递["windows", "ubuntu"]并从DB获取所有三个文档

我尝试了这样的事情,但没有奏效。

String osRegEx = String.join(" | ", new String[]{"windows", "ubuntu"});
query.addCriteria(Criteria.where("os").regex(osRegEx, "i"));

它以这种方式工作...

String osRegEx = String.join("|", new String[]{"windows.*", "ubuntu.*"});
query.addCriteria(Criteria.where("os").regex("("+osRegEx+")", "i"));

我认为您面临此问题是因为您为正则表达式提供的字符串。您在 mongo 中使用版本号Windows 10等,但您只有正则表达式字符串来匹配 windows/ubuntu 部分:

String osRegEx = String.join(" | ", new String[]{"windows.*", "ubuntu.*"});
query.addCriteria(Criteria.where("os").regex(osRegEx, "i"));

这是一个解决方案:

String [] queryStrs = { "windows", "ubuntu" };
String patternStr = Stream.of(queryStrs).collect(Collectors.joining("|", "(", ")"));
Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
Criteria criteria = new Criteria().regex(pattern);
Query query = Query.query(criteria);
List<Foo> result = mongoTemplate.find(query, Foo.class);

最新更新