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

网友投稿 234 2023-07-15

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

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

具体如下:

存放mongodb:

/**

* 公共方法:设置Object类型缓存

* @author shijing

* @param param

* @param sysGuid

*/

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);

}

/**

* 公共方法:设置List缓存

* @author shijing

* @param paramList

* @param sysGuid

*/

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);

}

读取方法

/**

* 通过关键字模糊查询问题和答案库

* @param param

* @return

*/

@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);

}

/**

* 公共方法:批量—— in方法查询List数据

* @author shijing

* @param ids id集合

* @param paramMap 其他参数

* @param columnName in字段列名

* @param collectionName 表名

* @return

*/

@Override

public List> batchSearchPageListByIds(List ids, Map

Object> 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;

}

/**

* 公共方法:通过参数获取List数据

* @author shijing

* @param paramMap 参数

* @param collectionName 表名

* @return

*/

@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<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 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方法也在上述代码里面。

总结

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

Object> 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;

}

/**

* 公共方法:通过参数获取List数据

* @author shijing

* @param paramMap 参数

* @param collectionName 表名

* @return

*/

@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<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 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方法也在上述代码里面。

总结

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Eclipse中maven异常Updating Maven Project的统一解决方案
下一篇:解决Eclipse/STS中出现Resource is out of sync with the file system的异常问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~