2016-07-13 9 views

答えて

1

ドキュメントは、あなたがサイズを使用して[並べ替えができないと言います。

sizeの値を含む新しい列を追加し、並べ替え順に動作する並べ替えを試してください。

-1

はルビーでは、このような配列をソートすることができます

my_array.sort_by(&:my_attr) 

それは、配列内の各要素の属性my_attrによって配列my_arrayをソートします。あなたはまた、このようにそれを書くことができ

:まったく同じです

my_array.sort_by{|element| element.my_attr } 

、それは各要素のmy_attr属性でソートされます。この2番目の構文は、各要素のメソッドの結果だけでなく、より複雑なソート条件が必要な場合に使用します。

ドキュメント:http://ruby-doc.org/core-2.3.1/Enumerable.html#method-i-sort_by

+0

これはどのようにこの質問に当てはまりますか? OPはMongoDBの内部に配列フィールドを持ち、MongoDBコレクションをその配列の長さでソートする必要があります。 –

+0

モデルの内部にあるフィールドとその配列に基づいてコレクションをソートする必要があります。例えばPostはモデル、 "likes"はuser_idの配列であるフィールドです。ですから、likes配列の長さに基づいてPostを並べ替える必要があります。 @muistooshortはまさに私が望むものです。 –

2

モンゴのドキュメントsays

あなたはサイズの範囲を見つけるために、$サイズを使用することはできません(例:配列の1つの以上の要素を持つ )。範囲をクエリする必要がある場合は、要素を追加するときにインクリメントする余分なサイズのフィールド を作成します。クエリの$ size部分にインデックス を使用することはできませんが、他の クエリ式が含まれている場合は、インデックスを使用してクエリ式のその部分の一致度を で検索できます。

mongoの$sizeを使用して注文することはできません。

タスクを解決するには、新しいフィールドを追加します。これは、配列サイズを格納します。

class Post 
    include Mongoid::Document 
    field :likes, type: Array, default: [] 
    field :likes_size, type: Integer 

    before_save do 
    self.likes_size = likes.size 
    end 
end 

ソートpostslikes_sizeによって:

Post.order_by(likes_size: :desc) 
+0

モデルの内部にあるフィールドとその配列に基づいてコレクションをソートする必要があります。例えばPostはモデル、 "likes"はuser_idの配列であるフィールドです。ですから、likes配列の長さに基づいてPostを並べ替える必要があります。 –

+0

ありがとう、もう少し簡単な質問私は外来キー(has_one関係)としてpost_idを持つモデルであり、このモデルは類似配列を持つPostactivityを持っています。今投稿モデルを並べ替えるにはどうすればいいですか?事前に感謝...あなたの時間を本当に感謝します。 –

+0

@BalajiThiruあなたはすべての詳細で新しい質問を作成してください。私は助けようとします。 –

関連する問題