الانتقال إلى المحتوى الرئيسي
الوحدة 15 · الدرس 1 من 256/57 في الدورة~15 min
دروس الوحدة (1/2)

التكامل بين JSON وJSONB

تكامل JSON وJSONB

أعادت PostgreSQL كتابة قواعد قواعد البيانات من خلال الجمع بين طبيعة ACID المطمئنة والصلبة لـ SQL مع المرونة الديناميكية والسلسة النموذجية لـ NoSQL. لقد فعلت ذلك من خلال تقديم أعمدة مخصصة أصلاً لتخزين بيانات JSON.

تنبيه: في Postgres يوصى دائمًا باستخدام JSONB. يشير الحرف "B" إلى ثنائي: تفقد مستندات JSON المخزنة في هذه الأعمدة تنسيقها النصي البحت، ولكنها تكتسب القدرة على التحقق من صحتها والاستعلام عنها بأداء عالٍ للغاية ومعالجتها وحتى فهرستها باستخدام B-tree الكلاسيكي أو GIN INDEX.

التنقل في JSON: عامل التشغيل "السهم".

لسوء الحظ، لا تحتوي قاعدة البيانات ecommerce حاليًا على أعمدة JSON خالصة محددة مسبقًا. ومع ذلك، يمكننا إنشاء قيم JSON مؤقتة و"إرسالها" من النص!

عند العمل مع JSON، فإن عوامل التشغيل التي تنتقل إلى الكائنات والمصفوفات هي -> (تحتفظ بالبيانات في نموذج jsonb/json النقي) أو نسختها "الموسعة" ->> (تحويل بيانات JSON التي تمت مواجهتها إلى نص).

مثال أكاديمي، كما لو كان هناك عمود JSON "بيانات تعريفية":

SQL
-- Look up the value associated with the info key
SELECT metadata->'info' FROM users;

-- Drill into info, and grab city as text
SELECT metadata->'info'->>'city' FROM users;
تمرين#sql.m15.l1.e1
المحاولات: 0جارٍ التحميل…

دعنا نقوم بالاستعلام عن JSON بسرعة. قم بتصميم حرف json \`'{"user": {"name": "Mario"}}'::json\` واستخدم عامل التشغيل \`->\` مدمجًا مع الإصدار النصي (\`->>\`) لاستخراج 'name'، وتسمية العمود المستخرج 'user_name'.

جارٍ تحميل المحرر…
إظهار التلميح

أرسل إلى ::json أو ::jsonb، واستخدم ->'user'->>'name'.

الحل متاح بعد 3 من المحاولات

تمرين#sql.m15.l1.e2
المحاولات: 0جارٍ التحميل…

ماذا لو مررنا مصفوفة؟ يعمل الوصول إلى المصفوفة في json_b في Postgres بواسطة INDEX (يعتمد على الصفر). قم باستخراج العنصر الثاني كنص من \`'["A"، "B"، "C"]'::json\` وقم بتسميته "حرف".

جارٍ تحميل المحرر…
إظهار التلميح

->>1 (إنها مبنية على الصفر!)

الحل متاح بعد 3 من المحاولات