2012-03-30 16 views
6

は、メソッドからのオブジェクトではなく値を返すために、とにかくそこにある:あなたがコレクションを持っている場合フィールドの最大値を持つオブジェクトを取得します[Mongoid]

Mongoid::Contexts::Enumerable#max 

Link to the rdoc

簡単な例がありますユーザーのと彼らはすべてのフィールドを持っている:年齢は=>私は、最大で最古のですか私はあなたの場合に最大の年齢(とユーザーのいずれかを取得します何か他のもの

答えて

10
one_of_oldest_users = User.desc(:age).limit(1).first 

を使用する必要があるユーザーを取得することができますいくつかあります)。それらをすべて取得したい場合は、最も簡単な方法は2パスを使用することです。

max_age = User.max(:age) 
oldest_users = User.where(age: max_age) 

# or, if you like one-liners 
oldest_users = User.where(age: User.max(:age)) 

これらのクエリを効率的にするには、もちろん、:ageにインデックスが必要です。

+0

最大の年齢がたとえば23歳で、その年齢の5つがある場合は失敗します。 –

+0

唯一の方法はコレクション全体をソートすることです。 –

+0

@muistooshort:ああ、十分に慎重に読まなかった。思考... –

関連する問題