您的位置:首页 > 数据库 > Mongodb

快速例子学习mongodb的mapreduce

2017-08-23 16:04 615 查看
感谢有奉献精神的人

转自:http://jackyrong.iteye.com/blog/1408548

map和reduce是十分有用的操作,特别是在NOSQL中.本文简单小结下 
在mongodb中对mapreduce的操作,以及在JAVA中如何操作. 

1 启动mongodb 
   mongo启动即可 

2 建立db 
   use test 

3 加点记录 
   > book1 = {name : "Understanding JAVA", pages : 100} 
> book2 = {name : "Understanding JSON", pages : 200} 
   > db.books.save(book1) 
> db.books.save(book2) 
  继续加 
  > book = {name : "Understanding XML", pages : 300} 
> db.books.save(book) 
> book = {name : "Understanding Web Services", pages : 400} 
> db.books.save(book) 
> book = {name : "Understanding Axis2", pages : 150} 
> db.books.save(book) 

4  先来做MAP,这里是先归类,按页数去划分分类,如下: 
  

Java代码  


> var map = function() {  

var category;  

if ( this.pages >= 250 )   

category = 'Big Books';  

else   

category = "Small Books";  

emit(category, {name: this.name});  

};  

5 然后再按reduce来统计个数 
 

Java代码  


> var reduce = function(key, values) {  

var sum = 0;  

values.forEach(function(doc) {  

sum += 1;  

});  

return {books: sum};  

};  

6 然后再查看下,结果显示为: 
  > var count  = db.books.mapReduce(map, reduce, {out: "book_results"}); 
> db[count.result].find() 

{ "_id" : "Big Books", "value" : { "books" : 2 } } 
{ "_id" : "Small Books", "value" : { "books" : 3 } } 

7 换用JAVA去实现之,注意下载mongodb的驱动,代码如下: 

Java代码  


import com.mongodb.BasicDBObject;  

import com.mongodb.DB;  

import com.mongodb.DBCollection;  

import com.mongodb.DBObject;  

import com.mongodb.MapReduceCommand;  

import com.mongodb.MapReduceOutput;  

import com.mongodb.Mongo;  

  

public class MongoClient {  

  

 /** 

  * @param args 

  */  

 public static void main(String[] args) {  

  

  Mongo mongo;  

    

  try {  

   mongo = new Mongo("localhost", 27017);  

   DB db = mongo.getDB("library");  

  

   DBCollection books = db.getCollection("books");  

  

   BasicDBObject book = new BasicDBObject();  

   book.put("name", "Understanding JAVA");  

   book.put("pages", 100);  

   books.insert(book);  

     

   book = new BasicDBObject();    

   book.put("name", "Understanding JSON");  

   book.put("pages", 200);  

   books.insert(book);  

     

   book = new BasicDBObject();  

   book.put("name", "Understanding XML");  

   book.put("pages", 300);  

   books.insert(book);  

     

   book = new BasicDBObject();  

   book.put("name", "Understanding Web Services");  

   book.put("pages", 400);  

   books.insert(book);  

   

   book = new BasicDBObject();  

   book.put("name", "Understanding Axis2");  

   book.put("pages", 150);  

   books.insert(book);  

     

   String map = "function() { "+   

             "var category; " +    

             "if ( this.pages >= 250 ) "+    

             "category = 'Big Books'; " +  

             "else " +  

             "category = 'Small Books'; "+    

             "emit(category, {name: this.name});}";  

     

   String reduce = "function(key, values) { " +  

                            "var sum = 0; " +  

                            "values.forEach(function(doc) { " +  

                            "sum += 1; "+  

                            "}); " +  

                            "return {books: sum};} ";  

     

   MapReduceCommand cmd = new MapReduceCommand(books, map, reduce,  

     null, MapReduceCommand.OutputType.INLINE, null);  

  

   MapReduceOutput out = books.mapReduce(cmd);  

  

   for (DBObject o : out.results()) {  

    System.out.println(o.toString());  

   }  

  } catch (Exception e) {  

   // TODO Auto-generated catch block  

   e.printStackTrace();  

  }  

 }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: