欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-01 20:51:10
由于需要用mongodb缓存数据,所以自己写了一套公共的存放和读取方法 具体如下: 存放mongodb: /** * 公共方法:设置object类型缓...

由于需要用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方法也在上述代码里面。

总结

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