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

  • 更新时间:2020-04-10 22:31:29
  • 编辑:郝晓燕

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

具体如下:

存放mongodb:

/**
   * 公共方法:设置Object类型缓存
   * @author shijing
   * @param param
   * @param sysGuid
   */
  public void setObjData(Map<String,Object> param, String sysGuid, String enumBpd){
    DBObject dbObject = new BasicDBObject();
    dbObject.putAll(param);
    String collectionName = EnumBpd.getBpdType(enumBpd) + sysGuid;
    mongoDao.insertToCol(dbObject,collectionName);
  }
  /**
   * 公共方法:设置List缓存
   * @author shijing
   * @param paramList
   * @param sysGuid
   */
  public void setListData(List<Map<String,Object>> paramList, String sysGuid, String enumBpd){
    List<DBObject> list = new ArrayList<>();
    if(CollectionUtils.isNotNull(paramList)){
      for (Map<String,Object> 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<DBObject> documents, String collectionName) {
    dropCol(collectionName);
    DBCollection dbCollection = mongoTemplate.createCollection(collectionName);
    dbCollection.insert(documents);
  }

读取方法

/**
   * 通过关键字模糊查询问题和答案库
   * @param param
   * @return
   */
  @Override
  public List<Map<String, Object>> searchQuestionAndAnswerByKeyword(Map<String, Object> param) {
    List<Map<String,Object>> searchList = new ArrayList<>();
    Map<String,Object> 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<DBObject> list = dbCursor.toArray();
    for (DBObject dbObject: list){
      searchList.add(dbObject.toMap());
    }
    //模糊查到的数据进行组装
    return getQuestionAndAnswerList(searchList);
  }
  /**
   * 公共方法:批量—— in方法查询List数据
   * @author shijing
   * @param ids id集合
   * @param paramMap 其他参数
   * @param columnName in字段列名
   * @param collectionName 表名
   * @return
   */
  @Override
  public List<Map<String, Object>> batchSearchPageListByIds(List<String> ids, Map<String,
      Object> paramMap, String columnName, String collectionName) {
    List<Map<String,Object>> 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<DBObject> list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DBObject dbObject: list){
        searchList.add(dbObject.toMap());
      }
    }
    return searchList;
  }
  /**
   * 公共方法:通过参数获取List数据
   * @author shijing
   * @param paramMap 参数
   * @param collectionName  表名
   * @return
   */
  @Override
  public List<Map<String, Object>> getListByParam(Map<String, Object> paramMap,String collectionName){
    List<Map<String,Object>> 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<DBObject> list = dbCursor.toArray();
    if (dbCursor!=null && dbCursor.size()>0){
      for (DBObject dbObject: list){
        searchList.add(dbObject.toMap());
      }
    }
    return searchList;
  }
  /**
   * 公共方法:通过参数获取Object数据
   * @author shijing
   * @param paramMap
   * @param collectionName 表名
   * @return
   */
  @Override
  public Map<String, Object> getObjectByParam(Map<String, Object> paramMap, String collectionName) {
    Map<String,Object> 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方法也在上述代码里面。

总结

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

相关教程

  • java数据结构实现AI机器人行走实例分享

    这篇文章主要为大家详细介绍了java数据结构实现机器人行走,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2020-01-06

  • Java运行时数据区知识点分析

    这篇文章主要介绍了Java运行时数据区概述,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2020-01-19

  • 关于Java Post数据请求和接收代码实例

    这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。

    发布时间:2020-01-11

  • 深入理解JavaScript中双向数据绑定

    这篇文章主要为大家详细介绍了JavaScript中双向数据绑定,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2020-02-11

  • RxJava响应式编程

    RxJava响应式编程

    主要介绍如何使用RxJava进行响应式编程,从响应式编程与RxJava的概念,到RxJava的操作符和源码,以及各种Scheduler的特点和适用场景,均做了较细致的讲解,是架构师提升必备入门书籍

    大小:71.1 MBRxJava电子书

  • Java游戏编程开发教程

    Java游戏编程开发教程

    Java游戏编程开发教程 是一本面向广大编程爱好者的游戏设计类图书。本书从最基本的Java图形开发开始,对游戏的原理及其Java程序实现进行了详细介绍,包括动画的实现、音效的处理、鼠标和

    大小:160.3 MBJava编程电子书

  • 代码不朽:编写可维护软件的10大要则(Java版)

    代码不朽:编写可维护软件的10大要则(Java版)

    本书提供代码示例,能够让读者一步步了解到如何对代码进行重构,从大量实践项目中提取出了编写可维护软件的10个最佳原则,帮助读者编写出高质量、简洁的代码,开发出松耦合、高可维护

    大小:25.1 MBJava电子书

  • Java 8基础应用与开发

    Java 8基础应用与开发

    《 Java8基础应用与开发 》包含Java8特点,知识结构图从入门到精通逐层加强,Q-DMS数据挖掘项目围绕本书,重视內容和实践活动,说道关键点和方式。结合实际成才全书的特性: 基础理论基础

    大小:188 MBJava8电子书

  • 轻量级Java EE企业应用实战(第5版)

    轻量级Java EE企业应用实战(第5版)

    本书是SSH经典图书升级版,全面拥抱Spring 5轻量级Web开发新特性;面世十余年,历经数十万读者检验,本书适合于有较好的Java编程基础,或者有初步JSP、Servlet基础的读者阅读

    大小:3.03 GBJava EE电子书

  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)

    深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)

    大小:253 MBJava虚拟机电子书

  • Java JDK 9学习笔记

    Java JDK 9学习笔记

    本书全新改版升级至Java JDK 9,汇集了学员在学习Java 或认证考试时遇到的概念、操 作、应用等问题及解决方案,适合Java 的初、中级读者以及广大Java 应用开发人员阅读

    大小:325.3 MBJava电子书

  • 数据结构与抽象:Java语言描述(第4版)

    数据结构与抽象:Java语言描述(第4版)

    《数据结构与抽象:Java语言描述》是一本数据结构的教材,Java语言与数据结构两条知识主线贯穿始终,这两条主线既相互独立又相互支撑。本书介绍了计算机编程中使用的数据结构和算法,包括29章,每章涉及一个ADT或其不同实现的规格说明和用法。

    大小:131.8 MBJava语言电子书

  • 神经网络算法与实现:基于Java语言

    神经网络算法与实现:基于Java语言

    本书结合Java编程语言,由浅入深地介绍了神经网络算法的应用,涉及神经网络的构建、神经网络的结构、神经网络的学习、感知机、自组织映射等核心概念,适合对神经网络技术感兴趣的开发人员和业余读者阅读

    大小:32 MB神经网络电子书

  • Java学习指南

    Java学习指南

    《Java学习指南(第4版)(上、下册)》 是畅销Java学习指南的最新版,详细介绍了Java 6和Java 7的语言特性和API。本书全面介绍了Java的基础知识,力图通过完备地介绍Java语言、其类库、编程技术以及

    大小:179.5 MBJava电子书

用户留言