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