是否可以在postgres中过滤数组而不过滤jsonb内部?

问题描述 投票:0回答:1

我想知道是否可以在 jsonb 中过滤数组而不过滤整个表或取消嵌套?

假设我有一张桌子:

id jsnob
1
{"names":["anna", "peter", "armin"]}
2
{"names":["anna"]}
3
{"names":["peter"]}

我想要相同的表,但要过滤名称,仅以“a”开头的名称:

id jsnob
1
{"names":["anna", "armin"]}
2
{"names":["anna"]}
3
{"names":null}

我用unnest(jsonb_array_elements)实现的,然后group by回json,但是速度相当慢。我想知道是否有更快的方法?

postgresql jsonb
1个回答
0
投票

您可以逐条记录地进行操作,无需展平整个表格然后重新分组。

update the_table 
set "jsonb" = jsonb_set("jsonb", '{names}',
  (select jsonb_agg(e) from jsonb_array_elements_text("jsonb"->'names') e where e ~* '^a')
);
© www.soinside.com 2019 - 2024. All rights reserved.