Java ——MongDB 插入資料、 模糊查詢、in查詢
由於需要用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方法也在上述程式碼裡面。
相關文章
- oracle 精確查詢和模糊查詢Oracle
- pgsql查詢優化之模糊查詢SQL優化
- mysql 模糊查詢MySql
- elasticsearch的模糊查詢Elasticsearch
- MyBatis模糊查詢LIKEMyBatis
- mybatis - [07] 模糊查詢MyBatis
- 手寫下拉選單,模糊查詢資料
- MySQL - 資料查詢 - 簡單查詢MySql
- sql 模糊查詢問題SQL
- SQL-基礎語法 - 條件查詢 - 模糊查詢SQL
- 二叉查詢樹的插入刪除查詢
- 資料庫高階查詢之子查詢資料庫
- SQL Server資料庫————模糊查詢和聚合函式SQLServer資料庫函式
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- mybatis-模糊查詢like CONCATMyBatis
- python 當中的模糊查詢Python
- [20190524]淺談模糊查詢.txt
- IndexPatternService 模糊查詢索引 fuzzyQuery分析Index索引
- [Uniapp] uni-combox模糊查詢APP
- int 被當作模糊查詢
- PostgreSQL DBA(192) - 整行模糊查詢SQL
- 資料庫基礎查詢--單表查詢資料庫
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- mysql like查詢 - 根據多個條件的模糊匹配查詢MySql
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- RESTFul資料查詢REST
- MYSQL查詢資料MySql
- indexedDB 查詢資料Index
- AMS 資料查詢
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- 20240719資料庫關聯查詢、條件查詢資料庫
- Mybatis中Oracle的拼接模糊查詢MyBatisOracle
- 報表怎麼做模糊查詢
- Mybatis模糊查詢結果為空MyBatis
- mybatis 對特殊字元的模糊查詢MyBatis字元
- Peewee Sqlite3 中文模糊查詢SQLite
- 【PostgreSQL】 字首模糊查詢級優化SQL優化