PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

JSON प्रकार के अंदर सरणी तत्वों के लिए क्वेरी

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 कॉलम में सरणी के तत्व के लिए क्वेरी


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NULL मानों के साथ NOT LIKE का व्यवहार

  2. वेब अनुप्रयोगों के लिए MySQL बनाम PostgreSQL

  3. क्या मुझे INDEX और UNIQUE INDEX दोनों को निर्दिष्ट करना चाहिए?

  4. विशिष्ट क्रम में एकाधिक मानों द्वारा एसक्यूएल ऑर्डर?

  5. मैं नोड-पोस्टग्रेज के साथ पीजी में कई पंक्तियों को ठीक से कैसे सम्मिलित करूं?