查询jsonb列以匹配键数组

时间:2019-01-24 03:47:28

标签: json postgresql matching jsonb postgresql-9.5

我有一个表Category,其中有一个jsonb列scope :include_all, -> { includes(trackable -> { include_all } ) }

items列类似于data

如何选择data仅具有键{"name": "aaa", "age": 23, "job": "dev"}data的项目?

2 个答案:

答案 0 :(得分:0)

您可以使用??&运算符。

对于您的用例,它将是:

SELECT * FROM table WHERE (NOT data ? 'job') AND (data ?& array ['name', 'age'])

答案 1 :(得分:0)

使用delete operator -,例如:

with items (data) as (
values
    ('{"name": "aaa", "age": 23}'::jsonb),
    ('{"name": "aaa", "age": 23, "job": "dev"}'),
    ('{"name": "aaa", "age": 23, "gender": "f"}')
)

select *
from items
where data - 'name'- 'age' = '{}'

            data            
----------------------------
 {"age": 23, "name": "aaa"}
(1 row)

在Postgres 10+中,您可以使用文本数组:

select *
from items
where data - array['name', 'age'] = '{}'