【问题标题】:PostgreSQL: get value of object inside jsonb array for full text searchPostgreSQL:获取jsonb数组中对象的值以进行全文搜索
【发布时间】:2017-10-25 05:28:14
【问题描述】:

如何根据数组中的对象内的键获取特定值?我将我的 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)

【问题讨论】:

    标签: sql postgresql full-text-search jsonb postgresql-9.6


    【解决方案1】:

    您应该使用 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) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2018-06-23
      • 1970-01-01
      • 2015-09-21
      • 2019-09-24
      • 2020-09-25
      相关资源
      最近更新 更多