2014-10-10 8 views
17

इस प्रश्न का समाधान बहुत आसान लग सकता है, लेकिन मैं बिना किसी जवाब के चारों ओर लहरा रहा हूं।मोंगोइड स्कोप चेक अगर ऐरे फ़ील्ड में मूल्य

मैं मैंगॉयड का उपयोग कर रहा हूं रेल 4.1.4 ऐप। मेरे पास एक मॉडल है जिसमें ऐरे फ़ील्ड है जो स्ट्रिंग मान रखेगी।

मैं उन मामलों में जहां इस सरणी क्षेत्र एक विशिष्ट स्ट्रिंग मूल्य, गुंजाइश के लिए एक पैरामीटर के रूप में दिया होता है पुनः प्राप्त करने के मॉडल में एक Mongoid केगुंजाइश की जरूरत है। मान लीजिए कि हम इस मॉडल करते हैं:

class SomeModel 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :some_array, type: Array, default: Array.new 

    scope :some_scope, ->(value){ elem_match(some_array: value) } 

end 

, क्योंकि जाहिर है, में MongoDB$ elemMatchमूल्य के रूप में एक मानदंड पाना चाहता है ऊपर गुंजाइश काम नहीं करता। लेकिन, मानदंड कैसे कहेंगे कि तत्व को दिए गए मान के बराबर होना चाहिए ???

इस सुंदर सरल दायरे को कैसे लिखना है इस पर कोई संकेत ???

सम्मान !!! अग्रिम में धन्यवाद।

उत्तर

25

आप बहुत अधिक जटिल चीजें हैं। यदि कोई फ़ील्ड सरणी रखती है तो आप इसे खोज सकते हैं जैसे कि यह एक सरणी नहीं थी। उदाहरण के लिए, यदि आप किसी दस्तावेज़ में इस अगर:

where(:some_array => 'pancakes') 

आपको लगता है कि दस्तावेज़ मिल जाएगा:

{ some_array: [ 'where', 'is', 'pancakes', 'house?' ] } 

और आप इस तरह एक प्रश्न है। आपको $elemMatch या यहां जटिल कुछ भी नहीं चाहिए; आप का नाटक कर सकते हैं सरणी आप की तरह सरल प्रश्नों के लिए एक भी मूल्य है कि:

scope :some_scope, ->(value) { where(:some_array => value) } 

आप केवल $elemMatch में प्राप्त करने की आवश्यकता है, तो आप सरणी के प्रत्येक तत्व के लिए कई शर्तें लागू करना चाहते हैं, से इस तरह बातें $elemMatch डॉक्स:

results: { $elemMatch: { $gte: 80, $lt: 85 } } 
// ^^^^^^^array   ^^^^^^^^^^^^^^^^^^^^^multiple conditions 

बुरा लग रहा है नहीं है, वर्तमान MongoDB डॉक्स इस सामान पर बिल्कुल स्पष्ट नहीं हैं (या कम से कम मैं नहीं एक स्पष्ट विवरण प्राप्त कर सकते हैं)।

+0

मेरे विचारों पर नहीं आया कि यह इतना आसान हो सकता है। मुझे इसे आज़माएं और मैं आपको बता दूंगा कि यह वास्तव में मेरे लिए काम करता है या नहीं। धन्यवाद!। –

+0

पूरी तरह से काम करता है। धन्यवाद!। –

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