>我在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);