1. 程式人生 > >php開發過程中mongodb資料庫groupby的使用

php開發過程中mongodb資料庫groupby的使用

由於做的是後臺的功能,所以大部分都是資料統計的功能

現在由於我的一條資料裡嵌套了另一個子陣列,所以統計的時候的初始化的值有一點問題,用的是mongodb資料庫,其他的資料庫就不知道怎麼統計啦吐舌頭,例如現在我要的統計的一條資料的形式為{  "_id" : 584b35ab8d02287d6f7cd096,  "fightType" :2,  "cardList" :[210321,  220061,  250061, 270061,  210041,  220381,  210861,  270421 ], "level" : 31}有_id,fightType,cardList,level這幾個欄位,而我現在的需求是要根據fightType這個欄位,來統計cardList欄位中每個id出現的次數,所以我的$keys=array('fightType'=>true);這個值代表的是以什麼來分類統計,可以新增多個,如果是空陣列代表的是沒有用什麼來區分他們,查詢全部的欄位,$initial=array(‘cardList’=>array('test'=>0)),這個代表的是初始化得值,就是自己統計需要的資料,由於一定要有初始化 的值,所以我只好自己弄了一個test給他,在處理資料的時候再把其去掉,那個cardList是自己命名的,你可以根據自己的需求命名,$reduce="function(obj,prev){

for(var i=0;i<obj.cardList.length;i++){
   if(prev.cardList.hasOwnProperty(obj.cardList[i])){
      prev.cardList[obj.cardList[i]] ++;
   }else{
      prev.cardList[obj.cardList[i]] = 1;
   }
}
}"obj是你當前物件,prev是你累加的文件內容。$condition = array('where'=>$where);這個根據什麼條件來選擇,可選可不選,

$result = $db->group($keys,$initial,$reduce,$condition);這樣就得出結果啦奮鬥

,得出的結果就為這樣

Array{

[0] => Array
[retval] => Array
        (
            [0] => Array
                (
                    [fightType] => 2
                    [cardList] => Array
                        (
                            [210041] => 1
                            [210321] => 1
                            [210861] => 1
                            [220061] => 1
                            [220381] => 1
                            [250061] => 1
                            [270061] => 1
                            [270421] => 1
                            [test] => 0
                        )

                )

            [1] => Array//假設有兩個不同的fightType值
( [fightType] => 1 [cardList] => Array ( [210041] => 1 [210081] => 1 [210321] => 1 [210861] => 1 [220061] => 1 [220381] => 1 [250061] => 1 [270061] => 1 [test] => 0 ) )

}

大概就是這樣