通过 jsonb 列中的给定键/值对过滤行
Posted
技术标签:
【中文标题】通过 jsonb 列中的给定键/值对过滤行【英文标题】:Filter rows by given key/value pair in a jsonb column 【发布时间】:2015-02-23 18:24:32 【问题描述】:我在 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”。
【问题讨论】:
通过您的数据设置,我不太确定一个非常有效的方法——但是,您可以在 json 的文本表示中使用“like”... 您的 JSON 对象中有多少层嵌套? 【参考方案1】:由于您的 JSON 对象似乎恰好嵌套在 一个 级别,您可以使用 jsonb_each()
取消嵌套一层并搜索动态键名的值部分(我们以这种方式忽略):
SELECT n.*
FROM public.neuro n, jsonb_each(n.data) d
WHERE d.value->>'examen' = 'aesc'
相关:
How to filter rows on nested values in a json column? How do I query using fields inside the new PostgreSQL JSON datatype?【讨论】:
以上是关于通过 jsonb 列中的给定键/值对过滤行的主要内容,如果未能解决你的问题,请参考以下文章