【问题标题】:Query jsonb column to match an array of keys查询 jsonb 列以匹配键数组
【发布时间】:2019-06-17 17:50:13
【问题描述】:

我有一个表 items,其中有一个 jsonb 列 data

data 列类似于{"name": "aaa", "age": 23, "job": "dev"}

我如何选择data只有键nameage的项目?

【问题讨论】:

  • Postgres 版本?
  • 嗨@LeninRajRajasekaran,我使用的是postgres 9.5.14版

标签: json postgresql matching jsonb postgresql-9.5


【解决方案1】:

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

对于您的用例,它将是:

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

【讨论】:

  • 感谢@Lenin,我只是测试一下。这仍然会选择具有 ['name', 'age', 'job'] 的项目。如何选择具有精确键数组的项目?
  • 是的,我阅读了您发送的文档并尝试使用 ?&。它仍然选择其他项目。奇怪
【解决方案2】:

使用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'] = '{}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2021-05-07
    • 2019-05-21
    • 1970-01-01
    相关资源
    最近更新 更多