2010-12-03 16 views
3

私はmongoidを使ってデータを保存しています。私は、扶養家族の数に応じて両親を分類しなければならないシナリオを持っています。私のモデルは単純です:mongoid orderingの問題

親モデルreferences_manyの扶養stored_as => array
依存モデルreference_many両親stored_as => array

私は、両親をループにしたい扶養家族の数を見つけ、配列に格納し、それらをダンプしません。私の見解に

私が必要とするのは、1つのクエリだけで扶養家族の数に応じて親をソートすることです。 これは可能ですか?

ありがとうございました。

答えて

8

扶養家族数のカウントを含むフィールドを追加し、コールバックで最新の状態に保つ必要があります。ような何か:

class MyModel 
    include Mongoid::Document 

    references_many :things 
    field :thing_count, :type => Integer 

    before_update :set_thing_count 
    def set_thing_count 
    self.thing_count = self.things.count 
    end 
end 

次に、あなたの並べ替えだけで次のようになります。

MyModel.asc(:thing_count) 

Mongoidがまだ並べ替えのための良好なクエリメカニズムを提供しますが、非正規化数フィールドを追加することが非常に簡単です、そしておそらくより良いはありませんとにかくパフォーマンスのために。お役に立てれば!