按照jsonb列中给定的键/值对过滤行

时间:2015-02-23 18:24:33

标签: json postgresql postgresql-9.4 jsonb

我在Postgres 9.4中有下一张表

CREATE TABLE public.neuro (
    nid int4 NOT NULL DEFAULT nextval('neuro_nid_seq'::regclass),
    data jsonb,
    CONSTRAINT neuro_pkey PRIMARY KEY (nid) NOT DEFERRABLE INITIALLY IMMEDIATE
);

记录:

{"item2": {"1": "0", "uid": "0", "nota": "weqcqwe qwe wq", "fecha": "23-02-2015", "examen": "aesc", "puntaje": "0", "paciente": "103636426"}}
{"item2": {"1": "0", "uid": "0", "nota": "text", "fecha": "23-02-2015", "examen": "aesc", "puntaje": "0", "paciente": "103636426"}}
{"item3": {"1": "3", "2": "1", "3": "3", "uid": "0", "fecha": "23-02-2015", "examen": "fab", "puntaje": "7", "paciente": "103636426"}}
...

如何选择examen ='aesc'的所有记录?我尝试使用运算符->>@。如何以相同的方式选择一些字段?我需要在jSON列中维护初始的“itemX”。

1 个答案:

答案 0 :(得分:1)

由于您的JSON对象似乎完全嵌套在一个级别,您可以使用jsonb_each()取消一个级别并搜索动态密钥名称的值部分(我们忽略这种方式) :

SELECT n.*
FROM   public.neuro n, jsonb_each(n.data) d
WHERE  d.value->>'examen' = 'aesc'

相关: