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驱动的源码,有的同学请留言给我,不胜感激
本人亲测有效,欢迎大家采纳

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值