【问题标题】:Filter rows by given key/value pair in a jsonb column通过 jsonb 列中的给定键/值对过滤行
【发布时间】: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 对象中有多少层嵌套?

标签: json postgresql postgresql-9.4 jsonb


【解决方案1】:

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

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

相关:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2015-03-28
    • 2022-07-02
    • 1970-01-01
    相关资源
    最近更新 更多