如果使用以下内容
Analytic.collection.map_reduce(map, reduce,
:query => {:page => subclass_name},
:sort => [[:pageviews, Mongo::DESCENDING]]).find.to_a
它不会按pageviews
排序。或者,如果它是散列数组:
Analytic.collection.map_reduce(map, reduce,
:query => {:page => subclass_name},
:sort => [{:pageviews => Mongo::DESCENDING}]).find.to_a
它也不起作用。我认为它必须是一个数组的原因是指定要排序的第一个字段,等等。我也尝试了一个平面数组而不是像上面第一个代码中列出的数组数组,它也没有工作
不工作吗?这是规范:http://api.mongodb.org/ruby/current/Mongo/Collection.html#map_reduce-instance_method
答案 0 :(得分:5)
你想做什么?排序实际上只与限制一起使用:它在地图之前应用,因此您可以只使用MapReduce最新的20个项目。如果您尝试对结果进行排序,则可以对输出集合进行常规排序。
答案 1 :(得分:3)
好的,这有点棘手:
在map_reduce()
之后,返回Mongo::Collection
个对象,但结构如下:
[{"_id":123.0,"value":{"pageviews":3621.0,"timeOnPage":206024.0}},
{"_id":1320.0,"value":{"pageviews":6584.0,"timeOnPage":373195.0}},
...
]
所以要进行排序,必须是:
Analytic.collection.map_reduce(map, reduce,
:query => {:page => subclass_name}).find({},
:sort => [['value.pageviews', Mongo::DESCENDING]])
请注意value.pageviews
部分。