MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

पोस्टग्रेज JSON सरणियों के अंदर क्वेरी करना

निम्नलिखित मूल उत्तर केवल पोस्टग्रेज 9.3 के लिए लागू होता है। पोस्टग्रेज़ 9.4 उत्तर के लिए, नीचे अद्यतन देखें।

यह इरविन के संदर्भित उत्तरों पर निर्मित होता है , लेकिन इस प्रश्न के लिए थोड़ा अधिक स्पष्ट है।

इस मामले में आईडी bigint . हैं s, इसलिए JSON सरणी को Postgres bigint में बदलने के लिए एक सहायक फ़ंक्शन बनाएं सरणी:

CREATE OR REPLACE FUNCTION json_array_bigint(_j json)
  RETURNS bigint[] AS
$$
SELECT array_agg(elem::text::bigint)
FROM json_array_elements(_j) AS elem
$$
  LANGUAGE sql IMMUTABLE;

हम आसानी से (और शायद अधिक पुन:प्रयोज्य रूप से) एक पाठ returned लौटा सकते थे इसके बजाय यहाँ सरणी। मुझे bigint . पर अनुक्रमणित होने का संदेह है पाठ . से बहुत तेज है लेकिन मुझे इसका समर्थन करने के लिए ऑनलाइन साक्ष्य खोजने में मुश्किल हो रही है।

इंडेक्स बनाने के लिए:

CREATE INDEX "myindex" ON "mytable" 
  USING GIN (json_array_bigint("blob"->'ids'));

पूछताछ के लिए, यह काम करता है और सूचकांक का उपयोग करता है:

SELECT * FROM "mytable" 
  WHERE '{185603363289694211}' <@ json_array_bigint("blob"->'ids');

ऐसा करना क्वेरी करने के लिए भी काम करेगा, लेकिन यह इंडेक्स का उपयोग नहीं करता है:

SELECT * FROM "mytable" 
  WHERE 185603363289694211 = ANY(json_array_bigint("blob"->'ids'));

9.4 के लिए अपडेट करें

पोस्टग्रेज 9.4 ने jsonb . पेश किया प्रकार। यह jsonb और आपको इसे json पर कब इस्तेमाल करना चाहिए? . संक्षेप में, यदि आप कभी भी JSON को क्वेरी कर रहे हैं, तो आपको jsonb . का उपयोग करना चाहिए ।

यदि आप अपना कॉलम jsonb . के रूप में बनाते हैं , आप इस क्वेरी का उपयोग कर सकते हैं:

SELECT * FROM "mytable"
  WHERE blob @> '{"ids": [185603363289694211]}';

@> is Postgres' में ऑपरेटर है, दस्तावेज jsonb . के लिए यहाँ .धन्यवाद Alain's answer इसे मेरे ध्यान में लाने के लिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला में वजन के साथ पूर्ण पाठ खोज

  2. django व्यवस्थापक फ़िल्टर और mongodb:प्रतिपादन करते समय डेटाबेस त्रुटि पकड़ा गया:यह क्वेरी डेटाबेस द्वारा समर्थित नहीं है

  3. MongoError:लोकलहोस्ट से कनेक्शन 0:27017 का समय समाप्त हो गया

  4. MongoDB डिफ़ॉल्ट उपयोगकर्ता और पासवर्ड क्या हैं?

  5. Mongodb - मौजूदा संग्रह के लिए स्कीमा जोड़ें