Java MongoDB查询(BasicDBObject和BasicDBList)

本人在开发过程中,遇到了一些查询MongoDB的业务需求,然后总结了一些 Java MongoDB 查询操作。

$in $lte sort 排序等用法,测试有效。

参数封装成实体,然后查询,之后封装为分页的结果。

利用 BasicDBObject 和 BasicDBList 即可完成 所有的基本查询操作。 包括$in $and $or $gte 等。

@Override
public Page searchByPage(AccidentSearchInRequest accidentSearchInRequest) {
    String province = accidentSearchInRequest.getProvince();
    DateParam dateParam = accidentSearchInRequest.getDateParam();
    String startDate = dateParam.getStartDate();
    String endDate = dateParam.getEndDate();
    String[] sgjb = accidentSearchInRequest.getSgjb();
    String[] atype = accidentSearchInRequest.getAtype();
    String order = accidentSearchInRequest.getPage().getOrders().get(0).getOrderBy();
    com.topcom.cms.common.page.PageRequest pageRequest = accidentSearchInRequest.getPage();
    Integer page = pageRequest.getPage();
    Integer limit = pageRequest.getLimit();


    BasicDBObject query=new BasicDBObject();//mongodb查询
    if (StringUtils.isNotBlank(province)){
        query.put("province",province);
    }
    if (sgjb.length>0){
        BasicDBList values = new BasicDBList();
        for (int i=0;i<sgjb.length;i++){
            values.add(sgjb[i]);
        }
        BasicDBObject in = new BasicDBObject("$in", values);
        query.put("sgjb",in);
    }
    if (atype.length>0){
        BasicDBList values = new BasicDBList();
        for (int i=0;i<atype.length;i++){
            values.add(atype[i]);
        }
        BasicDBObject in = new BasicDBObject("$in", values);
        query.put("atype",in);
    }
    query.put("originaltime", new BasicDBObject("$gte", startDate).append("$lte",endDate));
    BasicDBObject orderBy = new BasicDBObject(order, -1);
    DBCollection collection = MongoDBUtil.getDBCollection("acc");
    List<DBObject> queryList = collection.find(query).sort(orderBy).toArray();

    //获取pageable的参数的页码,从1开始
    int pageNo = page;
    //获取pageable的页显示大小
    int pageSize = limit;

    int fromIndex = pageSize * (pageNo - 1);
    int toIndex = pageSize * pageNo;

    if (toIndex > queryList.size()) {
        toIndex = queryList.size();
    }
    if (fromIndex > toIndex) {
        fromIndex = toIndex;
    }
    //获取list的分页集合
    List<DBObject> result = queryList.subList(fromIndex, toIndex);
    //创建page对象,并且可以排序
    Page pageResult = new PageImpl(result, new PageRequest(pageNo - 1, pageSize), queryList.size());

    return pageResult;
}

测试:

传入参数:

{ "atype": [ "煤矿" ], "dateParam": { "endDate": "2018-01-01", "startDate": "2011-01-01" }, "page": { "limit": 5, "orders": [ { "direction": "ASC", "orderBy": "deathnumber" } ], "page": 1 }, "province": "山东", "sgjb": [ "一般事故","较大事故","重大事故" ] }

结果: 成功!


经验分享 程序员 微信小程序 职场和发展