首页>代码>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日