jsonb
पोस्टग्रेज में 9.4+
आप कर सकते हैं नीचे दिए गए समान क्वेरी का उपयोग करें, बस jsonb_array_elements()
. के साथ ।
लेकिन इसके बजाय jsonb
. का उपयोग करें "शामिल है" ऑपरेटर @>
अभिव्यक्ति data->'objects'
. पर मेल खाने वाले GIN इंडेक्स के संयोजन में :
CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);
SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';
चूंकि कुंजी objects
एक JSON सरणी रखता है , हमें खोज शब्द में संरचना का मिलान करना होगा और सरणी तत्व को वर्ग कोष्ठक में भी लपेटना होगा। सादा रिकॉर्ड खोजते समय सरणी कोष्ठकों को छोड़ दें।
अधिक स्पष्टीकरण और विकल्प:
- JSON सरणी में किसी तत्व को खोजने के लिए अनुक्रमणिका
json
पोस्टग्रेज में 9.3+
फ़ंक्शन के साथ JSON सरणी को अननेस्ट करें json_array_elements()
एक पार्श्व में FROM
. में शामिल हों इसके तत्वों के लिए खंड और परीक्षण:
SELECT data::text, obj
FROM reports r, json_array_elements(r.data#>'{objects}') obj
WHERE obj->>'src' = 'foo.png';
db<>फिडल यहाँ
पुराना sqlfiddle
या, केवल एक एकल . के बराबर नेस्टिंग का स्तर:
SELECT *
FROM reports r, json_array_elements(r.data->'objects') obj
WHERE obj->>'src' = 'foo.png';
->>
, ->
और #>
ऑपरेटरों को मैनुअल में समझाया गया है।
दोनों प्रश्नों में एक निहित JOIN LATERAL
का उपयोग किया जाता है ।
निकट से संबंधित:
- JSON कॉलम में सरणी के तत्व के लिए क्वेरी