$elemMatch 实例,嵌套查询

    @RequestMapping("/getExcelData.go")
    @ResponseBody
    public ExcelViewBean getRedisData(ExcelViewBean excelViewBean) {
        // randomKey
        String randomKey = "123456";
        // 行号
        Integer colNum = excelViewBean.getColNum();
        // 行号的值 value
        String colValue = excelViewBean.getColValue();
        // 条件集合,把多个and/or条件关联到一起
        BasicDBList condList = new BasicDBList();
        // 搜索条件 and或者or
        BasicDBObject searchCond = new BasicDBObject();
            // 条件1 randomKey 
            BasicDBObject query1 = new BasicDBObject();
            query1.put("randomKey", randomKey);
            condList.add(query1);
            
            // 条件2 模糊查询 value like pattern   start
            Pattern pattern = Pattern.compile("^.*" + colValue + ".*$", Pattern.CASE_INSENSITIVE);
            // 存放两个条件的 querySub
            BasicDBObject querySub = new BasicDBObject();
            querySub.put("value", pattern);
            querySub.put("colnum", colNum);
            // 条件2的组装,查询col 下的 colnum和value ,数据结果如下所示:
            BasicDBObject query2 = new BasicDBObject("col",new BasicDBObject("$elemMatch", querySub));
            condList.add(query2);
            // 两个条件 and 链接
            searchCond.put("$and", condList);
            // 条件2 模糊查询 value like pattern   end
            
            System.out.println("新建数据时候,模糊查询的条件3:" + searchCond);
            // 查询到的结果集,遍历结果集,可对数据操作
            findIterable = collection.find(searchCond).skip(pageStart).limit(5);
            Integer allRowNum = (int) collection.count(searchCond);
            System.out.println("查询的条件3总记录数:" + allRowNum);
            excelBean.setAllRowNum(allRowNum);
            
            
            
            ***************说明:生成的mongodb下shell查询条件如下
            { "$and" : [ { "randomKey" : "1_1533626469_test.xlsx"} , { "col" : { "$elemMatch" : { "value" : { "$regex" : "^.*3.*$" , "$options" : "i"} , "colnum" : 2}}}]}
            
            
            
            
            
            
            
            // 条件2 的另一个写法 start --------------------------------!!!不对,不要用了
            Pattern pattern = Pattern.compile("^.*" + colValue + ".*$", Pattern.CASE_INSENSITIVE);
            condList.add(new BasicDBObject("col", new BasicDBObject("$elemMatch",new BasicDBObject("value", pattern))));
            condList.add(new BasicDBObject("col", new BasicDBObject("$elemMatch",new BasicDBObject("colnum", colNum))));
            searchCond.put("$and", condList);
            // 条件2 的另一个写法 end 
            
    }

 

你可能感兴趣的:(mongoDB)