Encuentre un precio mayor que el uso de operadores JSON
Aug 20 2020
Json:
"availability": [
{
"qty": 25,
"price": 3599,
"is_available": true
},
{
"qty": 72,
"price": 3599,
},
"is_available": true
]
Si quiero encontrar el precio con valor = " 3599 ", uso esta consulta:
select *
from product
where to_tsvector(product.data #>> '{availability}') @@ to_tsquery('3599')
o esta consulta:
SELECT *
FROM product
WHERE product.data @> '{"availability": [ { "price": 3599} ] }';
Agradable. Funciona bien.
Pero también necesito encontrar el precio> 1000
Intento esto:
select *
from product
where to_tsvector(product.data #>> '{availability}') @@ to_tsquery('>1000')
Pero el resultado está vacío (no se encontró nada).
Respuestas
3 a_horse_with_no_name Aug 20 2020 at 12:33
La búsqueda de texto completo es la herramienta incorrecta para este tipo de consultas.
Con Postgres 12, puede usar una expresión JSON / Path:
select *
from product
where data @@ '$.availability[*].price > 100';
Para versiones anteriores de Postgres, debe desanidar la matriz:
select *
from product
where exists (select *
from jsonb_array_elements(data -> 'availability') as x(item)
where (x.item ->> 'price')::int > 100);