zoukankan      html  css  js  c++  java
  • MongoTemplate复合条件查询

    分、 排序、按时间查询 

         Query query = new Query();
            //必须条件
            Criteria c = Criteria.where("VINID").is(Map.get(vin));
            //范围条件
            if(!StringUtils.isEmpty(start)&&StringUtils.isEmpty(end)){
                c.and("TIME1").gte(GetTime1(start));
            }else if(StringUtils.isEmpty(start)&&!StringUtils.isEmpty(end)){
                c.and("TIME1").lte(GetTime1(end));
            }else if(!StringUtils.isEmpty(start)&&!StringUtils.isEmpty(end)){

    //对同一个属性加两次限制需这样操作
                c.andOperator(
                c.where("TIME1").gte(GetTime1(start)),
                c.where("TIME1").lte(GetTime1(end))
                );
            }
            query.addCriteria(c);
            //总数
            num = (int) mongoTemplate.count(query,CarDataEx.class,"jmevTest");
            System.out.println("总数:"+num);
            ht.put("total", num);
            //分页
            query.skip((page-1)*rows).limit(rows);
            //排序
            query.with(new Sort(Sort.Direction.DESC,"TIME1"));
                    //query.with(new Sort(properties));
                    rst = mongoTemplate.find(query,CarDataEx.class,"jmevTest");

    二分组查询

     public Page<CourseDetail> listCourseDetails(QueryCourseDetailModel queryModel) {
    ​
            //条件一 where gradeId in (集合) and mark=true
            Criteria criteria = Criteria.where("gradeId").in(gradeIds).and("mark").is(true);
    ​
            if (null != status && status.size() > 0) {
                Criteria criteriaChild = new Criteria();
                //条件二  criteriaChild 条件查询 ( teacherCommentStatus = XX or parentsReplyTeacherStatus =XX  )
                criteriaChild.orOperator(Criteria.where("teacherCommentStatus").in(status), Criteria.where("parentsReplyTeacherStatus").is(replayStatus));
            }
    ​
            //拼接最后语句 where gradeId in (集合) and mark=true  and ( teacherCommentStatus = XX or parentsReplyTeacherStatus =XX  )
            criteria.andOperator(criteriaChild);
    
            //分组条件
            GroupBy groupBy = new GroupBy("gradeId")
                    .initialDocument("{ count: 0 }")
                    .reduceFunction("function (doc,pre){pre.count +=1 ;}");
    
            //使用 mongoTemplate.group 分组查询
            GroupByResults groupByResults = mongoTemplate.
                    group(criteria, "homework", groupBy, Homework.class);
    
            //获取结果
            BasicDBList list = (BasicDBList) groupByResults.getRawResults().get("retval");
            list.stream().map(map -> {
                BasicDBObject obj = (BasicDBObject) map;
                ......
                return obj;
            }).collect(Collectors.toList());
    ​
            return list;
    
            ​}
  • 相关阅读:
    五个Metro UI 风格的网页设计
    cocos2dx学习资料(转)
    Python性能鸡汤
    7款很棒的 HTML5 视频播放器
    优秀的后台管理界面设计案例分享
    Task的理解(转)
    超棒的20款javascript工具提示条(tooltips)类库(转)
    Xcode 证书生成、设置、应用(转)
    分享17个漂亮的电子商务网站(转)
    强烈免费25款商务logo设计模板(转)
  • 原文地址:https://www.cnblogs.com/anhaogoon/p/9354248.html
Copyright © 2011-2022 走看看