Java操作MongoDB插入數(shù)據(jù)進(jìn)行模糊查詢與in查詢功能
由于需要用MongoDB緩存數(shù)據(jù),所以自己寫了一套公共的存放和讀取方法
具體如下:
存放mongodb:
/**
* 公共方法:設(shè)置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);
}
/**
* 公共方法:設(shè)置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);
}
讀取方法
/**
* 通過關(guān)鍵字模糊查詢問題和答案庫
* @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;
//注釋里面這種方式雖然能模糊查詢,但是容易漏掉數(shù)據(jù),切記切記?。?!
//Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$", Pattern.CASE_INSENSITIVE);
BasicDBObject query= new BasicDBObject();
//模糊查詢的字段設(shè)置
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());
}
//模糊查到的數(shù)據(jù)進(jìn)行組裝
return getQuestionAndAnswerList(searchList);
}
/**
* 公共方法:批量—— in方法查詢List數(shù)據(jù)
* @author shijing
* @param ids id集合
* @param paramMap 其他參數(shù)
* @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));
}
//拼接參數(shù)
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;
}
/**
* 公共方法:通過參數(shù)獲取List數(shù)據(jù)
* @author shijing
* @param paramMap 參數(shù)
* @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();
//拼接參數(shù)
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;
}
/**
* 公共方法:通過參數(shù)獲取Object數(shù)據(jù)
* @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();
//拼接參數(shù)
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;
}
注意事項(xiàng):
mongodb模糊查詢時(shí)
Pattern pattern = Pattern.compile("^.*" + param.get("keyword") +".*$"
這種方式存在bug, 容易漏掉數(shù)據(jù)
應(yīng)該使用下面這種方式:
query.put("page_html", Pattern.compile((String) param.get("keyword")));
先記錄到這吧,有需要在補(bǔ)充,批量in方法也在上述代碼里面。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
關(guān)于idea剛打開時(shí)瘋狂報(bào)錯(cuò)的問題
這篇文章主要介紹了關(guān)于idea剛打開時(shí)瘋狂報(bào)錯(cuò)的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Eclipse中查看android工程代碼出現(xiàn)"android.jar has no source attachment
這篇文章主要介紹了Eclipse中查看android工程代碼出現(xiàn)"android.jar has no source attachment"的解決方案,需要的朋友可以參考下2016-05-05
java比較兩個(gè)list是否相同equals的代碼詳解
在本篇文章里小編給大家分享的是關(guān)于java比較兩個(gè)list是否相同equals的代碼詳解,有需要的朋友們可以參考學(xué)習(xí)下。2020-02-02

