2013-02-05 51 views
0

我試着組數由現場publish_targetMongoDB的PHP - 組查詢

使用MySQL我只是做:

$postsByPlatform = $db->query("SELECT COUNT(*) as `value`, `publish_target` as `key` FROM `Post` GROUP BY `publish_target` "); 
$postsByPlatform = $postsByPlatform->fetchAll(PDO::FETCH_OBJ); 
$return['Post']['publish_target'] = $postsByPlatform; 

,得到了這樣的結果:

publish_target: [ 
{ 
value: "22", 
key: "facebook" 
}, 
{ 
value: "33", 
key: "googleplus" 
}, 
{ 
value: "44", 
key: "instagram" 
}, 
{ 
value: "55", 
key: "other" 
}, 
{ 
value: "66", 
key: "twitter" 
} 
], 

我們現在轉換到Mongo。

我曾嘗試在PHP.net的例子,適應這樣的:

 // use all fields 
     $keys = array('publish_target'); 

// set intial values 
     $initial = array("count" => 0); 

// JavaScript function to perform 
     $reduce = "function (obj, prev) { prev.count++; }"; 

// only use documents where the "a" field is greater than 1 

     $g = $collection->group($keys, $initial, $reduce); 

     var_dump($g); 

但這只是返回

array(4) { 
    'retval' => 
    array(1) { 
    [0] => 
    array(1) { 
     'count' => 
     double(100) 
    } 
    } 
    'count' => 
    double(100) 
    'keys' => 
    int(1) 
    'ok' => 
    double(1) 
} 

這對我毫無意義。

如何正確執行此操作?

+0

可以使用聚合框架:'分貝。 '很容易翻譯成PHP,其中一個是 – Sammaye

+0

試過: $ collection = $ this- > mongoDB->發佈; ('$ sum'=> 1)))); $ array = $ array => array('_id'=>'$ publish_target','value'=> array('$ sum'=> 1)))); 輸出結果不是很好。陣列(3){ 'ERRMSG'=> 串(11) 「沒有這樣的CMD」 '壞CMD'=> 陣列(2){ '骨料'=> 串(4) 「後」 '管道」 =>數組 (1){ '$組'=>數組 (2){... } } } 'OK'=> 雙(0) } – azz0r

+0

嗯你可能運行一箇舊的mongodb版本,如果它說沒有集合命令,其中anh說這是因爲你沒有在那裏 – Sammaye

回答

1

我不知道這是否是問題,但我自己的代碼比較該行

$keys = array('publish_target'); 

應該是這樣的

$keys = array('publish_target' => true);