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方法也在上述代码里面。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接