最近用mongoDB做了一個類似mysql中group by的實做:
一個collection,裡面結構為:
節點 id :某物品Id
節點 date :該物品購買日期
節點 num : 該物品在該天的購買次數
裡面的記錄類似于:
array(’id’=>12345,’date’=>’2010-08-26′,’num’=>12)
array(’id’=>54321,’date’=>’2010-08-26′,’num’=>2)
array(’id’=>12345,’date’=>’2010-08-25′,’num’=>1)
array(’id’=>23456,’date’=>’2010-08-26′,’num’=>6)
如果我要查詢每個物品一共被賣出去多少,mysql中我們會這樣寫:SELECT `id`,sum(num) as total FROM `tablename` GROUP BY `id`;
那麼在mongo中怎麼做呢?
可以用 MongoDB::command來做:
$mdb = $mo->mydb;
$command = array(
‘group’=>array(
‘ns’ => ‘tmp_token_stat’,
‘key’=>array(’id’=>true),
‘$reduce’ => ‘function (obj, prev) { prev.sum += obj.num;}’,
‘initial’ => array(’sum’ => 0),
),
);
$rs = $mdb->command($command);
mongoDB的官方手冊在:http://www.mongodb.org/display/DOCS/Aggregation
php的官方手冊在:http://www.php.net/manual/en/mongodb.command.php