2012-06-11 40 views
1
collection: users 
fields: name, age 

我希望在PHP中應用地圖縮減功能,該功能將返回按用戶年齡分組並按年齡分類的用戶數。Mongo地圖縮小和排序

我無法在PHP中使用本機php-mongo驅動程序來找到任何好的示例。當然,我不想在客戶端排序,因爲結果可能很大。

+0

[這裏](http://stackoverflow.com/questions/3002841/mongo-map-reduce-first-time)是很好的例子,如何從PHP運行m/r。 –

+0

@Andrew沒有排序 – danidacar

+0

您可以輸出map reduce的結果到一個新的集合,然後對這個集合進行排序。如果您正在進行內聯映射縮減,則無法對結果進行排序。 http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Outputoptions – Jenna

回答

0

我打算假設你有你的聯繫,並且收集已經排序。你將不得不使用MongoCollection::group()功能得到結果

$keys = array('age' => 1); 
$initial = array('count' => 0); 
$reduce = "function(doc, out) { out.count++; }"; 

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

var_dump($result) 

至於排序:MongoDB的不支持排序組的結果,你必須在PHP做。這是因爲group()返回單個文檔而不是遊標,並且它在返回之前無法排序。根據文檔:

「要訂購分組數據,只需在返回時對客戶端進行排序。」

+0

怎麼樣排序? – danidacar

+0

MongoDB不支持排序組的結果,你必須在php中完成。這是因爲group()返回單個文檔而不是遊標,並且它在返回之前無法排序。 –

+0

mongo文檔:http://www.mongodb.org/display/DOCS/MapReduce,<使用此鍵對輸入對象進行排序。對於優化很有用,比如按排序鍵進行排序以減少縮減>] – danidacar