2012-10-21 14 views
33

इसे बहुत से पूछा जाना चाहिए लेकिन यह बहुत खराब दस्तावेज है। वहाँ मैं एक उपयोगकर्ता मौजूद है या नहीं (नीचे एक और क्वेरी है) की जाँच करने के कोशिश कर रहा हूँ http://mongoid.org/en/mongoid/docs/querying.htmlमोंगोइड या क्वेरी सिंटैक्स

में कोई जिक्र नहीं है, मैं कैसे (एक OR प्रकार क्वेरी

Username.where(:username=>@username, :email=>@email) 

को बदल सकते हैं या तो ईमेल या उपयोगकर्ता नाम से मेल खाना चाहिए)। http://omarqureshi.net/articles/2010-6-17-using-or-in-mongoid

निश्चित रूप से इस सही ढंग से करने के लिए एक सरल स्पष्ट वाक्य रचना होना चाहिए:

मैं ऑनलाइन (से) एक सीधा जावास्क्रिप्ट भेजने सहित कुछ बहुत जटिल तरीके पाया है?

उत्तर

35

हाँ, यह बेहतर दस्तावेज किया जाता था। इस प्रयास करें:

Username.any_of({:username => @username}, 
       {:email => @email}) 
101

जो दूसरों को इस पृष्ठ पर अंत के लिए, अद्यतन वाक्य रचना अब

Username.or({username: @username}, {email: @email}) 

है कृपया updated docs को देखें।

+10

स्कॉप्स में आपको अभी भी 'any_of' का उपयोग करना होगा अन्यथा यह एक वाक्यविन्यास त्रुटि फेंक देगा। – aledalgrande

+1

पोस्ट किया गया लिंक '.or' और न ही 'any_of' के बारे में कुछ भी नहीं बताता है, कृपया [यहां] देखें (https://github.com/mongodb/mongoid/blob/master/lib/mongoid/criteria/queryable/selectable। आरबी) विस्तृत दस्तावेज़ीकरण और कार्यान्वयन देखने के लिए – silva96

+0

आप scopes में self.or का भी उपयोग कर सकते हैं (क्योंकि 'या' रूबी में एक कीवर्ड है) – Shiyason

1

Mongoid 5.0 में, यह मुझे

Username.or({username: @username}.or({email: @email}) 
2

लिए काम करता है @ मिगुएल-Savignano की प्रतिक्रिया में कोई गलती नहीं है। स्टैकओवरफ्लो के अनुसार "संपादित कतार पूर्ण है", यही कारण है कि मैंने एक संपादन सबमिट नहीं किया है।

उचित वाक्य रचना:

Username.or({username: @username}).or({email: @email}) 

एक अधिक संक्षिप्त समाधान:

{"$or"=>[{"username"=>@username}, {"email"=>@email}]} 

मैं इस सवाल पाया के रूप में मैं था:

Username.or({username: @username}, {email: @email}) 

को मोंगो चयनकर्ता का समाधान हो जाएगा बनाने के लिए हल करने की कोशिश कर रहा है " या "प्रश्न।

यदि आप स्ट्रिंग या तत्वों में से किसी एक से मेल खाते हैं, तो आपको मोंगो '$' चयनकर्ता के साथ एक मोंगोइड क्वेरी लिखनी होगी।

उदाहरण के लिए, आपके पास एक विशिष्ट उपयोगकर्ता नाम और ईमेल की एक सरणी है। आप उन सभी परिणामों को वापस करना चाहते हैं जहां कम से कम एक फ़ील्ड उपयोगकर्ता नाम या सरणी के भीतर ईमेल में से किसी एक से मेल खाता है।

@username = "jess" 
@emails = ["[email protected]", "[email protected]", "[email protected]"] 
User.or({username: ""}, {email: {'$in': @emails}}) 

मोंगो चयनकर्ता का समाधान हो जाएगा करने के लिए:

{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["[email protected]", "[email protected]", "[email protected]"]}}]} 
  • आप अपने डेटाबेस में 3 ईमेल के 2 के साथ Users है, तो चयनकर्ता 2.
  • की गिनती वापस आ जाएगी यदि आपके पास Userusername "जेस" और 3 अतिरिक्त Users प्रत्येक दिए गए ईमेल में से प्रत्येक के साथ है, तो चयनकर्ता 4 की गिनती वापस कर देगा।
3

इसके अलावा, Mongoid 5.0 में, आप अभी भी where विधि का उपयोग करना चाहते हैं, का उपयोग निम्न

Username.where('$or' => [ { username: @username }, { email: @email } ]) 

इस बहुत उपयोगी है जब आप एक गतिशील रास्ते में क्वेरी हैश का एक प्रकार का निर्माण कर रहे हैं और आपको where विधि

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