1

我在 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”。

4

1 回答 1

2

由于您的 JSON 对象似乎恰好嵌套了一层,因此您可以取消嵌套一层jsonb_each()并搜索动态键名的值部分(我们以这种方式忽略):

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

有关的:

于 2015-02-23T23:34:13.477 回答