2012-03-30 5 views
6

वहाँ विधि से वस्तु और नहीं मान देने के लिए वैसे भी है: यदि आप संग्रह हैएक क्षेत्र के अधिकतम मूल्य के साथ वस्तु प्राप्त करें [Mongoid]

Mongoid::Contexts::Enumerable#max 

Link to the rdoc

एक आसान उदाहरण है उपयोगकर्ता की और वे सभी क्षेत्र है: उम्र => मैं उन है कि अधिकतम के साथ सबसे पुराने हैं या मैं (किसी और

उत्तर

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

कुछ का उपयोग करना चाहिए मामले में है कि आप सबसे बड़ी उम्र के साथ उपयोगकर्ताओं का एक एक मिल जाएगा प्राप्त कर सकते हैं वहाँ कई हैं)। यदि आप उन्हें सब कुछ प्राप्त करना चाहते हैं, तो दो-पास का उपयोग करना सबसे आसान तरीका है।

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, और उस उम्र में पांच हैं। –

+0

तो पूरे संग्रह को सॉर्ट करने का एकमात्र तरीका है>? –

+0

@muistooshort: आह, ध्यान से पर्याप्त नहीं पढ़ा। सोच रहा है ... –

संबंधित मुद्दे