我想知道是否可以在 jsonb 中过滤数组而不过滤整个表或取消嵌套?
假设我有一张桌子:
id | jsnob |
---|---|
1 |
|
2 |
|
3 |
|
我想要相同的表,但要过滤名称,仅以“a”开头的名称:
id | jsnob |
---|---|
1 |
|
2 |
|
3 |
|
我用unnest(jsonb_array_elements)实现的,然后group by回json,但是速度相当慢。我想知道是否有更快的方法?
您可以逐条记录地进行操作,无需展平整个表格然后重新分组。
update the_table
set "jsonb" = jsonb_set("jsonb", '{names}',
(select jsonb_agg(e) from jsonb_array_elements_text("jsonb"->'names') e where e ~* '^a')
);