java模糊查询——MongoDB
MongoDB的模糊查询是使用正则匹配实现:关键操作符**$regex**
1.MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。
2.MongoDB使用PCRE (Perl Compatible Regular Expression) 作为正则表达式语言。
当要实现MongoDB的document中某字段内容模糊查询时,可以在数组字段中使用正则表达式来查找内容 示例代码:
/**
* @Description: fuzzy,设置模糊查询条件
* @param map:
* @return: org.bson.Document
* @Author: hsy
* @Date: 2020/12/11
*/
public Document fuzzy(Map<String, Object> map){
List<Map<String, Object>> fuzzys = new ArrayList<>();
Document document = new Document();
if (map.containsKey("filter") && null != map.get("filter") && !"".equals(map.get("filter")) && map.get("filter")instanceof Map){
Map<String,Object> filter = (Map<String, Object>) map.get("filter");
for (Map.Entry<String, Object> entry:filter.entrySet()){
Map<String,Object> fuzzy = new HashMap<>();
Map<String,Object> regex = new HashMap<>();
regex.put("$regex",entry.getValue());
fuzzy.put(entry.getKey(),regex);
fuzzys.add(fuzzy);
}
if (null != fuzzys && fuzzys.size()>0){
document = new Document("$and", fuzzys);
}
}
return document;
}
/**
* @Description: fuzzyQuery,模糊查询
* @param map:
* @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
* @Author: hsy
* @Date: 2020/12/11
*/
@Override
public List<Map<String, Object>> fuzzyQuery(Map<String, Object> map) {
MongoCursor<Document> cursor = getDBCollection(map.get("collectionName").toString()).find(fuzzy(map)).iterator();
List<Map<String, Object>> mapList = new ArrayList<>();
while (cursor.hasNext()){
Document document = cursor.next();
mapList.add(document);
}
return mapList;
}