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": [
    "一般事故","较大事故","重大事故"
  ]
}

结果: 成功!



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值