प्रदर्शन कारण के लिए, मैं जब आदेश क्षेत्रों मैं लोड करना चाहते हैं निर्दिष्ट करने के लिए में एक mongoid क्वेरी लिखाई संभव only()
कीवर्ड के रूप में के रूप में अक्सर इस्तेमाल करते हैं। जब मैं केवल प्रदर्शन प्रयोजनों के लिए अपने सभी व्यवस्थापक के एक उपयोगकर्ता के ईमेल चाहतेMongoid: किसी ऑब्जेक्ट के केवल कुछ फ़ील्ड को लोड करने के लिए आप संदर्भ के माध्यम से आलसी लोड कैसे लोड करते हैं?
सामान्य संदिग्ध, उदाहरण के लिए है।
मैं लिखने होगा:
User.where(:groups => :admins).only(:email).each do |u|
puts u.email
end
मैं यह कर, क्योंकि मेरे उपयोगकर्ता मॉडल डेटा है कि मैं खुशी अनदेखा कर सकते हैं जब ईमेल का एक समूह लिस्टिंग के एक बहुत की काफी भरे हुए हैं।
हालांकि, अब कल्पना करें कि मेरे उपयोगकर्ताओं को एक परियोजना मॉडल के माध्यम से संदर्भित किया गया है, ताकि प्रत्येक प्रोजेक्ट के लिए मैं कर सकूं: project.user
। मैंगॉइड की आलसी लोडिंग के लिए धन्यवाद, जब मैं संदर्भ पर कॉल करता हूं तो मेरा ऑब्जेक्ट उपयोगकर्ता केवल तत्काल (और डीबी से पूछताछ) प्राप्त करेगा।
लेकिन क्या होगा अगर मैं उदाहरण के लिए सभी व्यवस्थापक परियोजना के मालिक के सभी ईमेल सूचीबद्ध करना चाहते हैं?
मैं इस बारे में होगा:
Project.where(:admin_type => true).each do |p|
puts p.user.email
end
बड़ी समस्या यहां है कि इस कर रही है, मैं प्रत्येक परियोजनाओं के लिए पूरे उपयोगकर्ता वस्तु लोड करते हैं, और अगर वहाँ क्वेरी से मेल खाने परियोजना के बहुत सारे है कि बहुत भारी हो सकता है कर रहे हैं । तो मैं केवल ईमेल कैसे लोड करूं?
मैं ऐसा कर सकता है:
User.where(:_id => p.user_id).only(:email).first.email
लेकिन यह स्पष्ट रूप से बस करने का अच्छा वाक्य रचना का उद्देश्य विफल:
p.user.email
काश मैं की तरह कुछ लिख सकते हैं: p.user.only(:email).email
, लेकिन मैं यह कर सकते हैं 'टी। कोई विचार ?
एलेक्स
क्या यह अभी तक लागू किया गया है? क्या गिटहब पर कोई मुद्दा इस के लिए मौजूद है? –
इसे प्लक कमांड के साथ जोड़ा गया है। User.all.pluck (: id)। Http://backkovic पर क्रेडिट http://stackoverflow.com/a/9991754/1050054 –