2015-12-02 9 views
8

पर इंडेक्स जोड़ें मुझे पोस्टग्रेस में जेसनबी फ़ील्ड की सरणी कुंजी के मानों की खोज करने की आवश्यकता है।jsonb फ़ील्ड

field: {'array_key' : [1, 2, 3, 4]} 

क्या यह संभव है array_key पर सूचकांक में जोड़ने के लिए या वहाँ मूल्यों पर खोज करने के लिए किसी भी अनुकूलित विधि है?

खोज प्रश्न की तरह

select * where field['array_key'].include?(2) 
+0

कर सकते हैं आप जोड़ते हैं कि आपकी खोज क्वेरी कैसी दिखती है? – ben

+0

यकीन है .. कुछ पसंद करें, चुनें * जहां फ़ील्ड ['array_key'] शामिल है? (2) – mudasir

उत्तर

10

आप के रूप jsonb कुंजी पर सूचकांक बना सकते हैं कुछ,

add_index :table_name, :field, :using => :gin, :expression => "(field->'array_key')", :name => 'index_table_name_on_field_array_keys' 

तो फिर तुम के रूप में सूचीबद्ध चाबियाँ पर खोज कर सकते हो जाएगा,,

where("table_name.field->'array_keys' @> ?", Array(2)) 
+1

रेल के किस संस्करण की आवश्यकता है? मैं 4.2.1 चला रहा हूं और प्राप्त करता हूं: 'एक त्रुटि आई है, यह और बाद में सभी माइग्रेशन रद्द हो गए: अज्ञात कुंजी:: अभिव्यक्ति' – ChristopherJ

+0

आह, मुझे लगता है कि यह रेल के लिए नया है 5. http: //guides.rubyonrails .org/5_0_release_notes.html # सक्रिय-रिकॉर्ड-उल्लेखनीय परिवर्तन – ChristopherJ

+2

'add_index: table_name," (फ़ील्ड -> 'array_key') ", का उपयोग कर: gin, name: 'index_table_name_on_field_array_keys'' रेल में 5.0.0 – Dinatih

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