php開發過程中mongodb資料庫groupby的使用
阿新 • • 發佈:2018-12-24
由於做的是後臺的功能,所以大部分都是資料統計的功能
現在由於我的一條資料裡嵌套了另一個子陣列,所以統計的時候的初始化的值有一點問題,用的是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 ) )
}
大概就是這樣