Postgres 查询 json 数组以查找符合条件的计数

Postgres query json array to find the count which matches the condition

我的 Postgres 12 数据库中有一个 table my_table,列名 itinerary

 select column_name, data_type from information_schema.columns where table_name = 'my_table' and column_name = 'itinerary';
 column_name | data_type
-------------+-----------
 itinerary   | ARRAY
(1 row)

行程中的每个元素都是一个 JSON,字段名称为 address,字段名称为 city。我可以使用以下查询找到与 itinerary 的第一个元素的条件相匹配的计数:

select count(*) from my_table where lower(itinerary[1]->'address'->>'city') = 'oakland';
count
-------
    12
(1 row)

我还可以使用以下查询找到数组的长度:

select array_length(itinerary, 1) from my_table limit 1;

我想找到所有行程中可以有城市名称Oakland的记录,而不只是作为第一站。我不确定如何弄清楚。提前致谢。

您可以使用 existsunnest():

select count(*)
from mytable t
where exists (
    select 1
    from unnest(t.itinerary) as x(obj)
    where x.obj -> 'address'->>'city' = 'oakland'
)