mongodb在java中进行模糊查询以及时间段查询总结

最近在java项目中写mongodb的案例,碰到了一些棘手的问题,
下面来总结一下(模糊查询,普通查询,时间段查询,还有一些特殊的查询方式)

贴一小段拼凑查询条件的代码
private BasicDBObject param; // 汇总查询条件
/*模糊查询
* 完全模糊
*pattern=Pattern.compile("^.*"+prodId.trim()+".*$",Pattern.CASE_INSENSITIVE);
* 匹配以...开头(左匹配)
pattern=Pattern.compile("^"+parodId.trim()+".*$",Pattern.CASE_INSENSITIVE);
* 匹配结尾(右)
*pattern=Pattern.compile("^.*"+prodId.trim()+"$",Pattern.CASE_INSENSITIVE);
* */
param = new BasicDBObject(); // 这是BSON格式的对象,实现了Map接口
BasicDBList condList = new BasicDBList();//存放查询条件的list集合
if (StringUtils.isNotBlank(prodId)) {
pattern=Pattern.compile("^.*"+prodId.trim()+".*$", Pattern.CASE_INSENSITIVE);
param.put("prodId", pattern);
}
if (StringUtils.isNotBlank(prodName)) {
pattern = Pattern.compile("^.*"+prodName.trim()+".*$",Pattern.CASE_INSENSITIVE);
param.put("prodName", pattern);
}
if (StringUtils.isNotBlank(prodStatus)) {
param.put("prodStatus", prodStatus.trim());
}
// 时间段的查询,比较复杂
if(StringUtils.isNotBlank(beginProdPutawayTime)&&StringUtils.isNotBlank(endProdPutawayTime)) {
condList.add(new BasicDBObject("prodPutawayTime", new BasicDBObject("$gte", beginProdPutawayTime +" 00:00:00").append("$lte", endProdPutawayTime +" 00:00:00")));
}
if (StringUtils.isNotBlank(beginProdOutOfStockTime) && StringUtils.isNotBlank(endProdOutOfStockTime)) {
condList.add(new BasicDBObject("prodOutOfStockTime", new BasicDBObject("$gte", beginProdOutOfStockTime +" 00:00:00").append("$lte", endProdOutOfStockTime +" 00:00:00")));
}
if(condList!=null&& condList.size()>0){
param.put("$and",condList);//多条件查询使用and
}

个人总结,如果想要在java中用好mongodb的查询,首先就要熟悉,了解mongodb的语法,只有这样,先写出来查询语句,再使用java进行拼凑,才是王道,

这里:Pattern对象:是java提供的正则对象,专门用来处理正则表达式的,使用它进行拼接条件,它会自动加上 regex:mongodbBasicDBList,list,,BasicDBObject,and, or的条件的话,我们把and换成or就可以了
BasicDBObject:符合Mongodb文档型条件的,实现了Map接口,具有map属性,可以使用append方法来拼接and类型的查询条件!
这里需要注意的是,假如是范围查询的话,只能使用append,进行拼接查询原理我就不用解释了吧,毕竟map的特性,相信各位还是有所了解的

本人正在找mongodb-java驱动的源码,有的同学请留言给我,不胜感激
本人亲测有效,欢迎大家采纳

你可能感兴趣的:(java,mongodb)