2012-06-11 26 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