PostgreSQL:获取 jsonb 数组中对象的值以进行全文搜索
PostgreSQL: get value of object inside jsonb array for full text search
如何根据数组中对象内的键获取特定值?我将 json 数据作为 jsonb 存储在我的 Postgres 9.6 DB
中
addresses (JSONB)
---------
[{"address":"abc@def.com", "type": "home"}, {"address":"xyz@def.com", "type": "work"}]
我喜欢做的是:
SELECT addresses ->> 'address' FROM foo
然后在全文搜索中使用结果,我在其中搜索特定的电子邮件地址,例如:
SELECT * FROM foo WHERE
to_tsvector('simple', CAST(addresses ->>'address' as text)) @@ to_tsquery('abc:*');
当我 运行 第一个查询时我得到的是:(NULL)
您应该使用 jsonb_array_elements():
取消嵌套 json 数组
with foo(addresses) as (
values
('[{"address":"abc@def.com", "type": "home"}, {"address":"xyz@def.com", "type": "work"}]'::jsonb)
)
select value->>'address' as address
from foo,
jsonb_array_elements(addresses)
where to_tsvector('simple', value->>'address') @@ to_tsquery('abc:*');
address
-------------
abc@def.com
(1 row)
如何根据数组中对象内的键获取特定值?我将 json 数据作为 jsonb 存储在我的 Postgres 9.6 DB
中addresses (JSONB)
---------
[{"address":"abc@def.com", "type": "home"}, {"address":"xyz@def.com", "type": "work"}]
我喜欢做的是:
SELECT addresses ->> 'address' FROM foo
然后在全文搜索中使用结果,我在其中搜索特定的电子邮件地址,例如:
SELECT * FROM foo WHERE
to_tsvector('simple', CAST(addresses ->>'address' as text)) @@ to_tsquery('abc:*');
当我 运行 第一个查询时我得到的是:(NULL)
您应该使用 jsonb_array_elements():
with foo(addresses) as (
values
('[{"address":"abc@def.com", "type": "home"}, {"address":"xyz@def.com", "type": "work"}]'::jsonb)
)
select value->>'address' as address
from foo,
jsonb_array_elements(addresses)
where to_tsvector('simple', value->>'address') @@ to_tsquery('abc:*');
address
-------------
abc@def.com
(1 row)