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 数组的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 查询包含特定键值的 json 对象中的行

命名查询根据包含某些值的列表(实例变量)查找所有实体

如何在mongodb中获取包含某些(字符串)值的集合的所有键

如何逃脱? (问号)运算符在 Rails 中查询 Postgresql JSONB 类型

PostgreSQL,删除具有重新编号列值的行

PostgreSQL 查询列上具有最小空值的行