Postgresql:如何查询包含某些值的 JSONb 数组

Posted

技术标签:

【中文标题】Postgresql:如何查询包含某些值的 JSONb 数组【英文标题】:Postgresql: How to query for JSONb arrays containing some value(s) 【发布时间】:2016-06-09 16:55:32 【问题描述】:

我有这张桌子:

CREATE TABLE lawyer (
  id SERIAL PRIMARY KEY,
  data jsonb
);

INSERT INTO lawyer (data) VALUES
    ('"a": 1'),
    ('"tags":["derecho", "civil", "laboral", "penal"]'),
    ('"tags":["derecho", "penal"]')
;

我想要的是 postgres 中的 JSONb 查询,用于在我需要查找包含“civil”OR“derecho”的任何条目的示例时

【问题讨论】:

Postgres JSONB: query values in JSON array的可能重复 【参考方案1】:

终于找到了办法:

将 json 数组直接存储为顶层:

INSERT INTO lawyer (data) VALUES
    ('["derecho","laboral","penal"]'),
    ('["derecho", "civil", "laboral", "penal"]'),
    ('["derecho", "penal"]')
;

SELECT * 
FROM lawyer 
WHERE data ? 'penal';

结果:

【讨论】:

【参考方案2】:

对于那些寻找原始数据结构答案的人,这里是 SQL:

SELECT * FROM lawyer WHERE lawyer.data->'tags' ? 'penal'

【讨论】:

以上是关于Postgresql:如何查询包含某些值的 JSONb 数组的主要内容,如果未能解决你的问题,请参考以下文章