源
发布于

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;
    }

评论