এসকিউএলাইটে জেএসওন সংরক্ষণ এবং কোয়েরি করা কি সম্ভব?


35

আমার একটি এসকিউএল ডাটাবেসে জেএসএন বস্তু সংরক্ষণ করতে হবে এবং তারপরে এটিতে জটিল প্রশ্নগুলি করা উচিত।

আমি এইভাবে একটি টেবিল করেছি:

+--------------------------------------+
|document |  property | string | number|
+--------------------------------------+
|foo      |  "title"  | "test" |       | 
+--------------------------------------+
|foo      |  "id"     |        |  42   | 
+--------------------------------------+
|bar      |  "id"     |        |  43   | 
+--------------------------------------+

দুটি বস্তুর জন্য

foo {"title": "test", "id": 42} 
bar {id: 43}

তবে আমি "এবং" অনুসন্ধানগুলি করতে পারি না, যেমন:

SELECT DISTINCT id  FROM table WHERE title = "test" AND id = 42 

যেমন আপনি দেখতে পাচ্ছেন, "WHERE" এর পরের অংশটি সম্পূর্ণ বোকামি, তবে কীভাবে একটি ক্যোয়ারী তৈরি করতে হবে যা আমার যা করতে চাইবে তা সম্পর্কে আমার কোনও ধারণা নেই।

তাহলে আপনি কি মনে করেন যে আমার ডেটা সঞ্চয় করার জন্য আরও ভাল উপায় বা "এবং" কোয়েরি করার মতো কোনও কার্যকারিতা নেই?

এবং অবশ্যই, জেএসএন কোনও সম্পত্তি থাকতে পারে, তাই আমি প্রতিটি বৈশিষ্ট্যের জন্য কলাম সহ একটি টেবিল তৈরি করতে পারি না।

আমি ওয়েবএসকিউএল ব্যবহার করছি যা এক্সটেনশন ছাড়াই এসকিউএলাইট।

আমি জানি আমার প্রশ্নটি বেশ নির্দিষ্ট, তবে আপনি কি আমাকে সাহায্য করতে পারেন?


2
যদি আপনার অ্যাপ্লিকেশনটির জন্য এটি সত্যিই গুরুত্বপূর্ণ হয় তবে আপনি সম্ভবত কোনও আসল ডকুমেন্ট স্টোর ("নোএসকিউএল") ব্যবহার করা থেকে ভাল or
a_horse_with_no_name


@CL। Yupp। যে প্রথমে ফলাফলের যখন জন্য "SQLite JSON" :) googling
Izzy

আপনার অ্যাকাউন্ট থাকতে হবে এবং সেগুলি মার্জ করতে হবে: dba.stackexchange.com/users/81459/tuxlu এবং dba.stackexchange.com/users/81513/tuxlu আপনি এই সহায়তা পৃষ্ঠাটি ব্যবহার করতে পারেন: dba.stackexchange.com/help/merging-accounts
জুলিয়েন ভাওয়াসিউর

@ আইজি সবার আগে, আমার পক্ষে কমপক্ষে এই প্রশ্নটি এখন প্রথম ফলাফল, ডকসগুলিতে নয়। দ্বিতীয়ত, এই এক্সটেনশনটি ওপির কাছে ভাল উত্তর নয়, যিনি 'ওয়েবএসকিউএল, যা এক্সটেনশন ছাড়াই এসকিউএলাইট' ব্যবহার করে স্পষ্ট করে বলেছিলেন।
ওজেফোর্ড

উত্তর:


35

SQLite 3.9 একটি নতুন এক্সটেনশন ( JSON1 ) প্রবর্তন করেছে যা আপনাকে JSON ডেটার সাথে সহজেই কাজ করতে দেয়।

এছাড়াও, এটি প্রকাশের উপর সূচকগুলির জন্য সমর্থন প্রবর্তন করেছে , যা (আমার বোঝার সাথে) আপনাকে আপনার জেএসওএন ডেটাতেও সূচকগুলি সংজ্ঞায়িত করতে দেয়।


7

পোস্টগ্রিএসকিউএলে জেএসএন স্টোরেজের জন্য কিছু দুর্দান্ত বৈশিষ্ট্য রয়েছে। আপনি JSON মানগুলি নির্বাচন করে বেছে নিতে পারেন

SELECT DISTINCT FROM TABLE WHERE foo->title=test AND id=42

আপনি যদি jsonbটাইপটি ব্যবহার করেন তবে আপনি JSON অবজেক্টের নির্দিষ্ট কীগুলিও সূচক করতে পারেন ।


5

এই চুক্তির জন্য বিদ্যমান উত্তরগুলি আসলে ওএস এর ডেটা জেএসএন হিসাবে সংরক্ষণ করে (যা সম্ভবত তার অন্তর্নিহিত সমস্যার আরও ভাল সমাধান হতে পারে)।

তবে, আসল প্রশ্নটি ছিল একাধিক সংখ্যার উপর ভিত্তি করে প্রদত্ত EAV- স্টাইলের টেবিলের নথিগুলি কীভাবে পাওয়া যায়। সুতরাং, সম্ভবত এই প্রশ্নের উত্তর কার্যকর হবে।

আপনি যা বলছেন তা করার স্ট্যান্ডার্ড এসকিউএল উপায় হ'ল ইন্টারসেকশন।

(SELECT document FROM table WHERE property="id" AND number=43)
INTERSECTION 
(SELECT document FROM table WHERE property="title" AND string="test")

আপনি যদি পছন্দ করেন তবে স্ব-যোগদানের সাথেও এটি করতে পারেন।

SELECT t1.document
FROM table as t1, table as t2
WHERE t1.document = t2.document
AND t1.property="id" AND t1.number=43
AND t2.property="title" AND t2.string="test"

অবশ্যই আরও "সঠিক" এবং তর্কযোগ্যভাবে সবচেয়ে কার্যকরী উপায় হ'ল 'আইডি' এবং 'শিরোনাম' এর মতো আপনার প্রয়োজনীয় প্রতিটি সম্পত্তির জন্য একটি কলাম তৈরি করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.