0

私はmongomapper +ソートと混同しています。

次のような投稿を含むデータを含むテストブログがあります。

http://www.mongodb.org/display/DOCS/Schema+Design

ここで、各ブログ エントリの時間順で並べ替えられたコメントだけを表示したいと思います。

where を使用すると Plucky を取得し、all() を使用すると Array を取得します...これはどのように機能しますか?

4

1 に答える 1

2

リンクした答えは、結果セットをメモリ内で並べ替えることです。これは、1つのバッチで表示できるよりも多くのコメントがある場合、コストがかかり、エラーが発生する可能性があります。

これを並べ替える正しい方法は、クエリでpluckyのsort()メソッドを使用して、created_atを降順(最新のものから)で並べ替えることです。

post.comments.sort(:created_at).each {|comment| do_awesome_stuff(comment) }

(has_manyコメントを持つPostモデルがあり、コメントに組み込みのcreated_atフィールドをしばらく使用していると仮定します。

Mongomapperは、ActiveRecordのスコープのような連鎖クエリ/フィルターモデルを使用します。そのため、where()は、sort()と同様に連鎖可能なPluckyクエリを返します。次に、それを結果の配列に変換したり、さらに多くの並べ替え/フィルターをチェーンしたりできます。また、pluckyクエリでeach()のような列挙子を直接使用することもできます。

上記の例のコードは、次の連鎖呼び出しを実行しています。

  1. この投稿オブジェクトのすべてのコメントをフィルタリングする、気の利いたクエリを返します
  2. そのクエリを更新して、created_atから返されたコメントを降順に並べ替えます
  3. dbから結果のグループを取得し、each()を介してそれらをコードに渡します。
于 2012-12-20T18:48:18.803 に答える