如何使用 sql/knexjs 查询迭代 json 数据

How to iterate on json data with sql/knexjs query

我正在使用 postgresql db.I 有一个名为 'offers' 的 table,其中有一列 'validity',其中包含 JSON 格式的以下数据:

[{"end_date": "2019-12-31", "program_id": "4", "start_date": "2019-10-27"}, 
{"end_date":"2020-12-31", "program_id": "6", "start_date": "2020-01-01"}, 
{"end_date": "2020-01-01", "program_id": "3", "start_date": "2019-10-12"}]

现在我想获取 'validity' 列包含的所有记录: program_id = 4 和 end_date > current_date.

如何写SQL查询或knexjs查询来实现? 提前致谢

您可以使用 EXISTS 条件:

select o.*
from offers o
where exists (select *
              from jsonb_array_elements(o.validity) as v(item)
              where v.item ->> 'program_id' = '3'
                and (v.item ->> 'end_date')::date > current_date)

Online example