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

あなたは何をしようとしているのですか?並べ替えは、実際には制限と組み合わせた場合にのみ役立ちます。マップの前に適用されるため、最新の20個のアイテムなどをMapReduceすることができます。結果を並べ替える場合は、出力コレクションに対して通常の並べ替えを行うことができます。

于 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 に答える