mongodb group(1)

“key” : {“day” : true}

“key”表示集合数据分组的依据。这里我们指定了“day”键,那么会根据集合文档中的发布时间来进行分组。“true”的意义?如果指定了{“day” : true},那么在分组的结果中就会显示每组“day”的键值

 initial是初始化的意思,分组为什么还要初始化呢?为了初始化累加器的键值

“doc”代表分组开发过程 中的每一个集合中的文档,而“prev”则代表“累加器文档”的累加状态,

(一)求和

db.test.insert({name:'zs', count:5})
db.test.insert({name:'zs', count:6})
db.test.insert({name:'zs', count:7})
db.test.insert({name:'ls', count:7})
db.test.insert({name:'ls', count:2})

按照name进行分组:求count字段的和

db.runCommand({"group" : {  

     "ns":"test",  

      "key": {"name":true},  

      "initial":{"count":0},  

     "$reduce":function(doc, prev){  

           prev.count+=doc.count  

       }  

}})  

结果

(    [retval] => Array        (       
         [0] => Array  (  
                           [name] => zs 
                            [count] => 18   
                        )            
         [1] => Array(   
                          [name] => ls
                          [count] => 9               
                  )       
         )    
    [count] => 5  
   [keys] => 2 
   [ok] => 1)

-------------------------------------------(二)-------------------------------------------------

mongodb group(1)_第1张图片

//sql:select  count(sex)  from table where age > 18 group by  sex 

$keys = array("sex" => true);
$initial = array("num" => 0,"age"=>0);
$reduce = "function (obj,prev){
    prev.sex = obj.sex;
    if(obj.age > 18){
        prev.num ++;
        prev.age +=obj.age;
    }
    
}";
$data = $guo->group($keys, $initial, $reduce);

 结果

(   
 [retval] => Array       (     
        [0] => Array  (  
             [sex] => 1  
             [num] => 3
             [age] => 72              
            )           
        [1] => Arra ( 
            [sex] => 0 
            [num] => 2 
            [age] => 50
           ) )  
 [count] => 6  
 [keys] => 2  
 [ok] => 1)

你可能感兴趣的:(mongodb group(1))