Temukan harga yang lebih mahal daripada menggunakan operator JSON
Aug 20 2020
Json:
"availability": [
{
"qty": 25,
"price": 3599,
"is_available": true
},
{
"qty": 72,
"price": 3599,
},
"is_available": true
]
Jika saya ingin mencari harga dengan nilai = " 3599 " saya menggunakan kueri ini:
select *
from product
where to_tsvector(product.data #>> '{availability}') @@ to_tsquery('3599')
atau pertanyaan ini:
SELECT *
FROM product
WHERE product.data @> '{"availability": [ { "price": 3599} ] }';
Bagus. Ini bekerja dengan baik.
Tetapi saya juga perlu menemukan harga> 1000
Saya coba ini:
select *
from product
where to_tsvector(product.data #>> '{availability}') @@ to_tsquery('>1000')
Tetapi hasilnya kosong (tidak ditemukan).
Jawaban
3 a_horse_with_no_name Aug 20 2020 at 12:33
Pencarian teks lengkap adalah alat yang salah untuk jenis kueri ini.
Dengan Postgres 12, Anda dapat menggunakan ekspresi JSON / Path:
select *
from product
where data @@ '$.availability[*].price > 100';
Untuk versi Postgres yang lebih lama, Anda perlu menghapus array:
select *
from product
where exists (select *
from jsonb_array_elements(data -> 'availability') as x(item)
where (x.item ->> 'price')::int > 100);
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'