IT/BigData와 MongoDB

Count, Distinct, Group, Map Reduce

바바옄 2015. 7. 7. 14:19
반응형

Robomongo 실행 방법

 

 

 

 

 

 

 

 

 

 

 

소스코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// 등록된 글 중 "number" 별 등록 개수 구하는 Query
 
// 데이터 준비
var post = {};
function addPost(){
    for(var i = 0; i<100; i++){
        for(var j=0; j<100; j++){
            post.number = i;
            post.postNumber = j;
            post.date = new Date();
            post.comment = "Hi hello"+i+j;
            
            db.post.insert(post);
            }
        
        }
    }
    
    addPost();
    
    db.post.count();
 
// Group화 하기
db.runCommand( {"group" : {
    "ns" : "post",
    "key" : {"number" : 1},
    "initial" : {"count" : 0},
    "$reduce" : function(curr, result){
          if(curr.number == result.number){
                result.count +=1;
              }
        },
        "condition" : {"number" : {"$gte" : 90}}
    }})
    
    
 
// 등록된 글들의 tag별 개수 구하기
 
// 자료 준비
var post = {};
 
function addPost(){
    for(var i = 0; i<50; i++){
       post.number = 0;
       post.tags = ["NoSQL""MySQL""Oracle"];
       db.test1.insert(post);
    }
    for(var i = 0; i<15; i++){
       post.number = 0;
       post.tags = ["NoSQL"];
       db.test1.insert(post);
    }
    for(var i = 0; i<5; i++){
       post.number = 0;
       post.tags = ["Oracle"];
       db.test1.insert(post);
    }
    
    for(var i = 0; i<10; i++){
       post.number = 1;
       post.tags = ["NoSQL""Winter"];
       db.test1.insert(post);
    }
    
    for(var i = 0; i<5; i++){
       post.number = 1;
       post.tags = ["NoSQL"];
       db.test1.insert(post);
    }
    
    for(var i = 0; i<15; i++){
       post.number = 2;
       post.tags = ["Sqring"];
       db.test1.insert(post);
    }  
}
  addPost();
  db.test1.find();
 
 
// 그룹화 하기
db.runCommand({"group" : {
        "ns" : "test1",
        "key" : {"number" : 1},
        "initial" : {"tags" : {}},
        "$reduce" : function(curr, result){
              // 배열의 인덱스 값 가져오기
              for(i in curr.tags){
                  if(curr.tags[i] in result.tags){
                        result.tags[curr.tags[i]]++;
                  }
                  else{
                        result.tags[curr.tags[i]] = 1;
                  }                 
              }
         },
         // 결과 중에 제일 많은 것 가져오기 
        "finalize" : function(result){
            var mostPopular = 0;
            for(i in result.tags){
               if(result.tags[i] > mostPopular){ 
                    result.tag = i;
                    mostPopular = result.tags[i];
               }
            }
            delete result.tags
         }     
      }})
    
 
 
cs
반응형

'IT > BigData와 MongoDB' 카테고리의 다른 글

INSERT / UPDATE / DELETE / FIND/ MapReduce  (0) 2015.07.08
Spring-Data-MongoDB 연동  (0) 2015.07.07
MapReduce  (0) 2015.07.07
MongoDB 설치  (0) 2015.07.07