首页>代码>java mongodb多个collection表进行mapreduce的查询实例>/mapreduce/src/main/java/com/main/MapReduceTest.java
                
                package com.main;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Random;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
public class MapReduceTest {
	private Mongo mongo = null;
	private DB db = null;
	@Before
	public void init() {
		try {
			mongo = new Mongo("localhost");
			db = mongo.getDB("stat");
			initData();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (MongoException e) {
			e.printStackTrace();
		}
	}
	/**
	 * map reduce for today
	 */
	@Test
	public void dayMapReduce() {
		String map = " function() {emit(this.videoid,this.play)}";
		String reduce = "function(key,values) {var count = 0;values.forEach(function(value){count += value;});return count;}";
		Calendar calendar = Calendar.getInstance();
		String datePattern = "yyyy-MM";
		SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
		String monthOfYear = sdf.format(calendar.getTime());
		for (int day = 1; day <= 31; day++) {
			String collectionName = monthOfYear + "-" + day;
			DBCollection collection = db.getCollection(collectionName);
			collection
					.mapReduce(map, reduce, collectionName + "_daystat", null);
		}
	}
	/**
	 * map reduce for current month
	 */
	@Test
	public void monthMapReduce() {
		// do day mapreduce before month mapreduce
		dayMapReduce();
		String map = " function() {emit(this._id,this.value)}";
		String reduce = "function(key,values) {var count = 0;values.forEach(function(value){count += value;});return count;}";
		Calendar calendar = Calendar.getInstance();
		String datePattern = "yyyy-MM";
		SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
		String monthOfYear = sdf.format(calendar.getTime());
		for (int day = 1; day <= 31; day++) {
			String collectionName = monthOfYear + "-" + day + "_daystat";
			DBCollection collection = db.getCollection(collectionName);
			MapReduceCommand cmd = new MapReduceCommand(collection, map,
					reduce, monthOfYear + "_monthstat",
					MapReduceCommand.OutputType.REDUCE, null);
			collection.mapReduce(cmd);
		}
	}
	private void initData() {
		db.dropDatabase();
		Calendar calendar = Calendar.getInstance();
		String datePattern = "yyyy-MM";
		SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
		String monthOfYear = sdf.format(calendar.getTime());
		for (int day = 1; day <= 31; day++) {
			String collectionName = monthOfYear + "-" + day;
			DBCollection collection = db.getCollection(collectionName);
			for (int j = 1; j <= 100; j++) {
				DBObject play = new BasicDBObject();
				play.put("videoid", new Random().nextInt(100));
				play.put("play", new Random().nextInt(1000));
				collection.insert(play);
			}
		}
	}
	@After
	public void destory() {
		if (mongo != null)
			mongo.close();
		mongo = null;
		db = null;
	}
}
 最近下载更多
最近下载更多
                
                renjialu7     LV4
                2020年12月28日
            
            
        
                oppoposwsdf     LV1
                2020年6月2日
            
            
        
                zhanggy007     LV1
                2020年5月13日
            
            
        
                xiao_ma     LV1
                2019年12月19日
            
            
        
                海水有点甜     LV2
                2019年12月12日
            
            
        
                wzw1234567     LV2
                2019年6月4日
            
            
        
                hxt18157146539     LV2
                2019年5月21日
            
            
        
                skylar_running     LV2
                2019年5月17日
            
            
        
                lijunable     LV1
                2019年4月22日
            
            
        
                489472910     LV1
                2019年3月26日
            
            
        
 
     
     最近浏览
最近浏览 
                