jsonb
di Postgres 9.4+
Anda bisa gunakan kueri yang sama seperti di bawah ini, hanya dengan jsonb_array_elements()
.
Melainkan gunakan jsonb
operator "berisi" @>
dalam kombinasi dengan indeks GIN yang cocok pada ekspresi data->'objects'
:
CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);
SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';
Karena kunci objects
memegang array J JSON , kita perlu mencocokkan struktur dalam istilah pencarian dan membungkus elemen array ke dalam tanda kurung siku juga. Lepaskan tanda kurung array saat mencari catatan biasa.
Penjelasan dan opsi lebih lanjut:
- Indeks untuk menemukan elemen dalam larik JSON
json
di Postgres 9.3+
Hapus sarang array JSON dengan fungsi json_array_elements()
di lateral bergabung dalam FROM
klausa dan uji elemennya:
SELECT data::text, obj
FROM reports r, json_array_elements(r.data#>'{objects}') obj
WHERE obj->>'src' = 'foo.png';
db<>main biola di sini
sqlfiddle lama
Atau, setara dengan hanya tunggal tingkat bersarang:
SELECT *
FROM reports r, json_array_elements(r.data->'objects') obj
WHERE obj->>'src' = 'foo.png';
->>
, ->
dan #>
operator dijelaskan dalam manual.
Kedua kueri menggunakan JOIN LATERAL
implicit implisit .
Berhubungan erat:
- Kueri elemen larik di kolom JSON