Postgres:搜索数组的所有子数组
Postgres: Searching all sub-arrays of an array
我有一个带有 json 列的 Postgres table,名为 raw_data
,其结构如下:
[{"id":1234, "name":"John Doe", "purchases":12}, {"id":1234, "name":"Jane Doe", "purchases":11}]
子数组的数量可以不同。它可以是 1 或 20 或任何数字。
我想执行一个查询,如果 'John Doe' 出现在 raw_data
列中,我可以 return 整个 table 行。我已经知道我可以执行这样的查询:
select * from my_table where raw_data->0->> 'name' = 'John Doe'
但这行不通,因为 int(本例中为零)指定数组的 nth 子数组,我不知道哪个子数组-要提前查看的数组。
有没有办法通过所有个子数组指定搜索?
您可以使用 JSON 路径表达式:
select *
from my_table
where raw_data @@ '$[*].name == "John Doe"';
这假定 raw_data
是一个 jsonb
列(它应该是)。如果不是,则需要施放它 raw_data::jsonb
我有一个带有 json 列的 Postgres table,名为 raw_data
,其结构如下:
[{"id":1234, "name":"John Doe", "purchases":12}, {"id":1234, "name":"Jane Doe", "purchases":11}]
子数组的数量可以不同。它可以是 1 或 20 或任何数字。
我想执行一个查询,如果 'John Doe' 出现在 raw_data
列中,我可以 return 整个 table 行。我已经知道我可以执行这样的查询:
select * from my_table where raw_data->0->> 'name' = 'John Doe'
但这行不通,因为 int(本例中为零)指定数组的 nth 子数组,我不知道哪个子数组-要提前查看的数组。
有没有办法通过所有个子数组指定搜索?
您可以使用 JSON 路径表达式:
select *
from my_table
where raw_data @@ '$[*].name == "John Doe"';
这假定 raw_data
是一个 jsonb
列(它应该是)。如果不是,则需要施放它 raw_data::jsonb