मेरे पास नोट मॉडल पर डेटा का निम्न सेट है। वर्तमान में, मैं डेटाबेस के लिए Postgres का उपयोग कर रहा हूँ। नीचे Notes टेबल पर दो अलग-अलग रिकॉर्ड हैं।

id: 1,
name: 'First Note',
items: [{description: 'First Note'}, {description: 'PM1 Second Note'}]

id: 2,
name: 'Second Note',
items: [{description: 'Second Note'}, {description: 'PM2 Second Note'}]

id: 3,
name: 'Third Note',
items: [{description: 'Third Note'}, {description: 'Invalid Second Note'}]

मैं json फ़ील्ड (आइटम) को कैसे क्वेरी करूं ताकि मुझे विवरण फ़ील्ड पर PM मान के साथ सभी नोट मिलें यानी क्वेरी को उपरोक्त उदाहरण से आईडी 1 और 2 के साथ नोट्स वापस करना चाहिए?

0
Code father 15 सितंबर 2020, 04:54

2 जवाब

सबसे बढ़िया उत्तर

कच्चे एसक्यूएल के साथ आप नीचे के साथ हासिल कर सकते हैं:

select * from notes,
  json_array_elements(items) element
  where element->>'description' LIKE '%PM%';

सक्रिय रिकॉर्ड के साथ नीचे का प्रयास करें:

Note.where("EXISTS (SELECT FROM json_array_elements(items) element WHERE element->>'description' LIKE '%PM%')")
2
user11350468 15 सितंबर 2020, 17:14

मैंने परीक्षण नहीं किया, लेकिन निम्न में से एक को काम करना चाहिए।

Note.where("items->>'description' iLIKE ?", '%PM%')
# or
Note.where("items::json -> 'description' iLIKE ?", '%PM%')
0
Emu 15 सितंबर 2020, 06:04