栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java操作MongoDB插入数据进行模糊查询与in查询功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java操作MongoDB插入数据进行模糊查询与in查询功能

由于需要用MongoDB缓存数据,所以自己写了一套公共的存放和读取方法

具体如下:

存放mongodb:


  public void setObjData(Map param, String sysGuid, String enumBpd){
    DBObject dbObject = new BasicDBObject();
    dbObject.putAll(param);
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(dbObject,collectionName);
  }
  
  public void setListData(List> paramList, String sysGuid, String enumBpd){
    List list = new ArrayList<>();
    if(CollectionUtils.isNotNull(paramList)){
      for (Map param : paramList){
 DBObject dbObject = new BasicDBObject();
 dbObject.putAll(param);
 list.add(dbObject);
      }
    }
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(list,collectionName);

mongoDao里面的方法:

public void insertToCol(DBObject document, String collectionName) {
    dropCol(collectionName);
    DBCollection dbCollection = mongoTemplate.createCollection(collectionName);
    dbCollection.insert(document);
  }
  public void insertToCol(List documents, String collectionName) {
    dropCol(collectionName);
    DBCollection dbCollection = mongoTemplate.createCollection(collectionName);
    dbCollection.insert(documents);
  }

读取方法


  @Override
  public List> searchQuestionAndAnswerByKeyword(Map param) {
    List> searchList = new ArrayList<>();
    Map userInfo = SessionUtils.getUserInfo();
    String sysGuid = userInfo.get("sys_guid").toString();
    String collectionName = EnumBpd.getBpdType(EnumBpd.HELP_PAGE_LIST.getType())+sysGuid;
    //注释里面这种方式虽然能模糊查询,但是容易漏掉数据,切记切记!!!
    //Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$", Pattern.CASE_INSENSITIVE);
    BasicDBObject query= new BasicDBObject();
    //模糊查询的字段设置
    query.put("page_html", Pattern.compile((String) param.get("keyword")));
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List list = dbCursor.toArray();
    for (DBObject dbObject: list){
      searchList.add(dbObject.toMap());
    }
    //模糊查到的数据进行组装
    return getQuestionAndAnswerList(searchList);
  }
  
  @Override
  public List> batchSearchPageListByIds(List ids, Map paramMap, String columnName, String collectionName) {
    List> searchList = new ArrayList<>();
    BasicDBObject query= new BasicDBObject();
    //批量查询,in
    if (CollectionUtils.isNotEmpty(ids)){
      BasicDBList values = new BasicDBList();
      values.addAll(ids);
      query.put(columnName, new BasicDBObject("$in",values));
    }
    //拼接参数
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
 query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DBObject dbObject: list){
 searchList.add(dbObject.toMap());
      }
    }
    return searchList;
  }
  
  @Override
  public List> getListByParam(Map paramMap,String collectionName){
    List> searchList = new ArrayList<>();
    BasicDBObject query= new BasicDBObject();
    //拼接参数
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
 query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBCursor dbCursor = mongoDao.findAll(query,collectionName);
    List list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DBObject dbObject: list){
 searchList.add(dbObject.toMap());
      }
    }
    return searchList;
  }
  
  @Override
  public Map getObjectByParam(Map paramMap, String collectionName) {
    Map webSiteInfo = new HashMap<>();
    BasicDBObject query= new BasicDBObject();
    //拼接参数
    if(MapUtils.isNotEmpty(paramMap)){
      for (String mapKey: paramMap.keySet()){
 query.put(mapKey, paramMap.get(mapKey));
      }
    }
    DBObject dbObject = mongoDao.findOne(query,collectionName);
    if(dbObject!=null){
      return dbObject.toMap();
    }
    return webSiteInfo;
  }

注意事项:

mongodb模糊查询时

Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$"

这种方式存在bug, 容易漏掉数据

应该使用下面这种方式:

query.put("page_html", Pattern.compile((String) param.get("keyword")));

先记录到这吧,有需要在补充,批量in方法也在上述代码里面。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对考高分网的支持。如果你想了解更多相关内容请查看下面相关链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/139529.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号