Rumah >pangkalan data >tutorial mysql >Bagaimana untuk membuat pertanyaan untuk Padanan Elemen Array JSON dalam PostgreSQL?

Bagaimana untuk membuat pertanyaan untuk Padanan Elemen Array JSON dalam PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 10:49:43204semak imbas

How to Query for JSON Array Element Matches in PostgreSQL?

Pertanyaan padanan elemen tatasusunan JSON dalam PostgreSQL

Jenis data JSON PostgreSQL boleh menjadi rumit apabila menanyakan elemen tertentu dalam tatasusunan bersarang. Pertimbangkan contoh berikut:

<code>{
  "objects": [{"src":"foo.png"},
{"src":"bar.png"}],
  "background":"background.png"
}</code>

Untuk menanyakan rekod yang nilai "src"nya sepadan dengan "foo.png" dalam tatasusunan "objek", anda boleh menggunakan cantuman sisi dalam klausa FROM.

PostgreSQL 9.3 dan ke atas

Untuk PostgreSQL 9.3 dan ke atas, gunakan fungsi json_array_elements() untuk mengembangkan tatasusunan "objek" dan menguji setiap elemen:

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

PostgreSQL 9.4 dan ke atas

Dalam PostgreSQL 9.4 dan ke atas, anda harus menggunakan fungsi jsonb_array_elements() dan mencipta indeks GIN yang sepadan pada ungkapan:

<code class="language-sql">CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);

SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>

Ingat bahawa untuk padanan tatasusunan, elemen perlu disertakan dalam kurungan segi empat sama, manakala padanan objek biasa tidak memerlukan kurungan. Untuk butiran lanjut dan penyelesaian, lihat dokumentasi terpaut dan sumber lain yang disediakan dalam soalan.

Atas ialah kandungan terperinci Bagaimana untuk membuat pertanyaan untuk Padanan Elemen Array JSON dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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