【使用BasicDBObject操作Mongo】
1. 使用 BasicDBObject 查询 mongo 示例
import org.springframework.data.mongodb.core.MongoTemplate; @Autowired(required = false) private MongoTemplate mongoTemplate; public List<DbaIncident> getDbaIncidentListByCriteria(Map<String, Object> params,Integer start, Integer limit) { List<DbaIncident> DbaIncidentList = new ArrayList<>(); BasicDBObject query = new BasicDBObject(); BasicDBList dbs = MongoDBUtils.matchClosureTime("alarm_time", start_time, end_time); //事件段约束 query.append("$and", dbs); //模糊搜索 BasicDBList dbList = new BasicDBList(); if(tableName.equals("t_data_alarm_url")){ dbList.add(new BasicDBObject("biz_name", new BasicDBObject("$regex", keyWord).append("$options", "$i"))); dbList.add(new BasicDBObject("app_name", new BasicDBObject("$regex", keyWord).append("$options", "$i"))); dbList.add(new BasicDBObject("server_ip", new BasicDBObject("$regex", keyWord).append("$options", "$i"))); } BasicDBObject or = new BasicDBObject("$or", dbList); dbs.add(or); if (StringUtil.isNotEmpty(client_mac)) { //模糊匹配查询 Pattern pattern = Pattern.compile("^.*"+client_mac+".*$", Pattern.CASE_INSENSITIVE); query.append("client_mac", pattern); } List<String> apiUuidList = new ArrayList(); query.append("app_uuid",new BasicDBObject("$in", apiUuidList)); MongoCollection<Document> dBCollection = mongoTemplate.getCollection(tableName); FindIterable<Document> urlDocument= dBCollection.find(query).sort(new BasicDBObject("alarm_time", -1)).skip(start).limit(limit); MongoCursor<Document> iterator = urlDocument.iterator(); while (iterator.hasNext()) { Document next = iterator.next(); try { DbaIncident dbaIncident = JsonUtil.jsonToObject(next.toJson(), DbaIncident.class); DbaIncidentList.add(dbaIncident); } catch (Exception e) { e.printStackTrace(); } } }
2. 使用 BasicDBObject 更新 mongo 示例
当更新的字段不存在时,自动创建该字段,默认值为当前更新的值
updateOne
public Boolean updateSafeBulltinStatus(Map<String, Object> params) { try { String tableName = ""; String sourceType = String.valueOf(params.get("sourceType")); if ("database".equals(sourceType)) { Integer alarmTime = (Integer) params.get("alarmTime"); tableName = "t_data_alarm_dbsql_" + DateUtil.intToStringDate(alarmTime, DateUtil.DEFAULT_DATE_FORMAT); }else if ("bussiness".equals(sourceType)) { tableName = "t_data_alarm_url"; } BasicDBObject where = new BasicDBObject("alarm_id", String.valueOf(params.get("alarmId"))); BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("safeStatus", (Integer) params.get("safeStatus"))); mongoTemplate.getCollection(tableName).updateOne(where, set); }catch (Exception e) { e.printStackTrace(); return Boolean.FALSE; } return Boolean.TRUE; }
更新一调数据的说个字段值
BasicDBObject where = new BasicDBObject("alarm_id", incidentUuid); BasicDBObject condition = new BasicDBObject("status",IncidentStatusEnum.CLOSED.getValue()); condition.append("close_time",DateUtil.getCurrentTime()); condition.append("close_cause",closeIncidentDto.getCloseCause()); BasicDBObject set = new BasicDBObject("$set", condition ); String tableName = ""; mongoTemplate.getCollection(tableName).updateOne(where, set);
updateMany更新多条记录
在 MongoDB 中,我们如果我们需要更新多条记录,既可以使用 update 函数,还可以使用 updateMany 函数,官方推荐使用 updateMany 函数。
mongoTemplate.getCollection(tableName).updateMany({ "url" : "www.haicoder.net"}, { $set:{ "url":"haicoder.net"}})
insertMany 插入多条数据
mongoTemplate.getCollection(tableName).insertMany([{ "name":"haicoder", "url":"www.haicoder.net"}, { "name":"HaiCoder", "url":"www.haicoder.net"}, { "name":"golang", "url":"https://haicoder.net/golang/golang-tutorial.html"}])