1. 程式人生 > >MongoDB中使用MongoTemplate 進行資料操作初級,高階操作

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