2

如果使用以下

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

4

2 回答 2

5

你想做什么?排序实际上只与限制结合使用:它在地图之前应用,因此您可以仅 MapReduce 最新的 20 个项目或其他内容。如果您尝试对结果进行排序,则可以对输出集合进行正常排序。

于 2010-09-21T22:47:49.977 回答
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部分。

于 2010-09-22T03:32:27.650 回答