Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menyoal Elemen Khusus Dalam Tatasusunan JSON dalam PostgreSQL?

Bagaimanakah Saya Boleh Menyoal Elemen Khusus Dalam Tatasusunan JSON dalam PostgreSQL?

DDD
Lepaskan: 2025-01-15 10:12:42
asal
813 orang telah melayarinya

How Can I Query Specific Elements Within JSON Arrays in PostgreSQL?

Menyiasat elemen tatasusunan JSON dalam PostgreSQL

PostgreSQL 9.3 dan kemudian menyokong jenis data JSON, membenarkan data JSON disimpan dan dimanipulasi dalam pangkalan data. Ciri ini membolehkan menyimpan struktur data yang kompleks (seperti tatasusunan objek) ke dalam satu lajur. Walau bagaimanapun, pertanyaan untuk elemen atau nilai tertentu dalam struktur kompleks ini boleh menjadi mencabar.

Anggap bahawa lajur bernama "data" dalam jadual "laporan" menyimpan data JSON berikut:

<code class="language-json">{
  "objects": [
    {"src":"foo.png"},
    {"src":"bar.png"}
  ],
  "background":"background.png"
}</code>
Salin selepas log masuk

Tugas biasa ialah untuk mendapatkan semula semua laporan yang mengandungi nilai khusus daripada medan "src" tatasusunan "objek". Menyoal medan JSON rata seperti "latar belakang" adalah mudah, tetapi mengekstrak elemen dalam tatasusunan memerlukan pendekatan yang berbeza.

Pertanyaan berikut berjaya mendapatkan semula semua laporan yang sepadan dengan nilai "latar belakang" yang diberikan:

<code class="language-sql">SELECT data AS data FROM reports WHERE data->>'background' = 'background.png'</code>
Salin selepas log masuk

Walau bagaimanapun, cuba tanya nilai dalam tatasusunan "objek" menggunakan sintaks yang serupa (contohnya):

<code class="language-sql">SELECT data AS data FROM reports WHERE data->>'objects' = 'foo.png'</code>
Salin selepas log masuk

tidak akan menghasilkan hasil yang diharapkan kerana "objek" ialah tatasusunan, bukan medan mudah.

Untuk berjaya menanya elemen dalam tatasusunan JSON, anda boleh menggunakan fungsi json_array_elements() dalam gabungan mendatar. Fungsi ini mengekstrak satu elemen daripada tatasusunan, membolehkan anda menguji setiap elemen secara individu.

Pertanyaan berikut menggunakan cantuman sisi untuk mengembangkan tatasusunan "objek" dan menguji kehadiran nilai "src" tertentu:

<code class="language-sql">SELECT data AS data
FROM reports r, json_array_elements(r.data#>'{objects}') obj
WHERE obj->>'src' = 'foo.png';</code>
Salin selepas log masuk

Sebagai alternatif, untuk satu tahap sarang, anda boleh menggunakan versi ringkas pertanyaan:

<code class="language-sql">SELECT *
FROM reports r, json_array_elements(r.data->>'objects') obj
WHERE obj->>'src' = 'foo.png';</code>
Salin selepas log masuk

Pertanyaan ini menggunakan operator #>, -> dan ->> untuk melintasi struktur JSON. Lihat dokumentasi PostgreSQL untuk butiran mengenai operator ini.

Selain itu, untuk mengoptimumkan prestasi pertanyaan JSON kompleks yang melibatkan tatasusunan, pertimbangkan untuk menambah indeks GIN pada ungkapan JSON yang berkaitan. Ini boleh meningkatkan kelajuan carian dengan ketara, terutamanya dalam kes set data yang besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Elemen Khusus Dalam Tatasusunan JSON dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan