查询 jsonb 列中的数组值
Query for array values within jsonb column
我的 work
table 中有一个名为 chores
的 jsonb
列,数据如下所示:
[{"task": "feed_dog", "value": "Daily"},{"task": "mop_floor", "value": "Weekly"]
每个用户的 chores
数组中可能有零到几十个任务。
如何按任务名称查询?例如,拉取至少一个 task
是 feed_dog
的所有记录。
SELECT chores->>'task' FROM work
returns 一堆 null
结果,SELECT chores->'task' FROM work
也是如此。
您需要取消嵌套数组:
select w.*
from "work" w
where exists (select *
from jsonb_array_elements(w.chores) as t(task)
where t.task ->> 'task" = 'feed_dog');
使用 Postgres 12 写起来更容易一些:
select *
from "work" w
where jsonb_path_exists(w.chores, '$[*] ? (@.task == "feed_dog")')
我的 work
table 中有一个名为 chores
的 jsonb
列,数据如下所示:
[{"task": "feed_dog", "value": "Daily"},{"task": "mop_floor", "value": "Weekly"]
每个用户的 chores
数组中可能有零到几十个任务。
如何按任务名称查询?例如,拉取至少一个 task
是 feed_dog
的所有记录。
SELECT chores->>'task' FROM work
returns 一堆 null
结果,SELECT chores->'task' FROM work
也是如此。
您需要取消嵌套数组:
select w.*
from "work" w
where exists (select *
from jsonb_array_elements(w.chores) as t(task)
where t.task ->> 'task" = 'feed_dog');
使用 Postgres 12 写起来更容易一些:
select *
from "work" w
where jsonb_path_exists(w.chores, '$[*] ? (@.task == "feed_dog")')