MongoDB中使用MongoTemplate 進行資料操作初級,高階操作
1.簡介
查了好多關於MongoDB的文字,大部分基於資料庫的,很少有Template的,這裡總結下
2.實現程式碼
2.1插入物件:
MongoTemplate mongos = MongoInstance.getMongo(); 獲得模板物件
在專案中用:
@Autowired
private MongoTemplate mongoTemplate;
物件程式碼如下:
package com.jf.cloud.monitor; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.mongodb.core.MongoTemplate; public class MongoInstance { public static MongoTemplate getMongo(){ return new ClassPathXmlApplicationContext("applicationContext.xml").getBean("mongoTemplate",MongoTemplate.class); } }
MongoDB引入到ssm專案可以看我上篇文章;
當然你也可以這麼寫:
// Mongo mongo = new Mongo("localhost",27017);
//
// DB db = mongo.getDB("test");
//
// DBCollection co = db.getCollection("dayCollection");
獲得collection進行操作;
2.呼叫模板的insert方法
mogo.insert(插入的物件,要插入的集合);
static MongoTemplate mongo = MongoInstance.getMongo(); Query query=new Query(Criteria.where("operationCode").is("b1")); List<Document> collection = mongo.find(query, Document.class,logName); int i=0; int jvmTotal=0; int jvmUsed = 0; for(Document c:collection){ // System.out.println(c.get("jvmTotal").toString()); jvmTotal =+ Integer.valueOf(c.get("jvmTotal").toString()); i++; jvmUsed =+Integer.valueOf(c.get("jvmUsed").toString()); } Document doc = new Document(); doc.put("projectCode",ServerMonitorFormatter.proCode); doc.put("operationCode", ServerMonitorFormatter.serviceCode.b1.toString()); doc.put("controlCode", ServerMonitorFormatter.controlCode); doc.put("logLevel", ServerMonitorFormatter.logLevel.INFO.toString()); doc.put("LogTime", logName); doc.put("jvmUsed", jvmUsed/i); doc.put("jvmTotal", jvmTotal/i); mongo.insert(doc, DAY_DATA_COLLECTION);
3查詢初級操作
這是查詢key:operationCode 是c1,recordTime時間範圍在startDate和endDate之間的操作。
//"$gt" 、"$gte"、 "$lt"、 "$lte"(分別對應">"、 ">=" 、"<" 、"<=")
Query query=new Query(Criteria.where("operationCode").is("c1").and("recordTime").gte(startDate).lte(endDate));
List<Document> collection = mongos.find(query, Document.class,"dayCollection");
mongos.find(查詢條件,返回的物件型別,在哪個collection中查詢)
當然你還可以加條件。
排序:
Query query=new Query(Criteria.where("operationCode").is("b1"));
query.with(new Sort(new Order(Direction.DESC, "recordTime")));//時間倒序
query.limit(1);//選取最新的一條
List<Document> collection = mongoTemplate.find(query, Document.class,daStr);
4高階查詢操作
Aggregation的應用,很版本有很多關係。但是功能更強大。還有一種使用DBObject方法的查詢
查詢如上;
Query query=new Query(Criteria.where("operationCode").is("b4"));
List<Document> collection = mongo.find(query, Document.class,logName);
int count = Integer.valueOf(collection.get(0).get("diskCount").toString());
Criteria c = Criteria.where("operationCode").is("b4");
Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(c),Aggregation.limit(count));
AggregationResults<Document> collection2 = mongo.aggregate(aggregation, logName ,Document.class);
mongo.insert(collection2, DAY_DATA_COLLECTION);
聚合查詢;
感謝:https://blog.csdn.net/vbirdbest/article/details/77102999