Postgresql按键值从jsonb对象数组中删除对象

Postgresql remove object from jsonb array of objects by key value

所以我得到了这个 table,格式分别为 text 和 jsonb。

    qualif_id    |                                                                                                                                          qualif_assessment_formats                                                        
-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 QL0000000000003 | [{"af_sum": 432, "af_branch": "BR0000000000001", "af_currency": "EUR", "af_app_deadline": "25-10-2022 12:00:00", "af_acquire_datetime": "10-11-2022"}]
 QL0000000000004 | [{"af_sum": 432, "af_branch": "BR0000000000001", "af_currency": "EUR", "af_app_deadline": "25-10-2022 12:00:00", "af_acquire_datetime": "10-11-2022"}, {"af_sum": 432, "af_branch": "BR0000000000005", "af_currency": "EUR", "af_app_deadline": "25-10-2022 12:00:00", "af_acquire_datetime": "10-11-2022"}]

我想做的是进行查询,从每个数组中删除包含特定 af_branch 值的对象,例如 'BR0000000000001'。所以结果看起来像这样:

    qualif_id    |                                                                                                                                          qualif_assessment_formats                                                        
-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 QL0000000000003 | []
 QL0000000000004 | [{"af_sum": 432, "af_branch": "BR0000000000005", "af_currency": "EUR", "af_app_deadline": "25-10-2022 12:00:00", "af_acquire_datetime": "10-11-2022"}]

同样,只有 'BR0000000000001' 可以进入。尝试使用 jsonb_to_recodset,然后对其进行过滤,然后 jsonb_agg 将其恢复到状态...并且还使用 jsonb_query_path_array,但一切似乎都不起作用。将不胜感激,干杯!

您可以使用 JSON 路径函数:

select qualif_id,
       jsonb_path_query_array(qualif_assessment_formats, 
                              '$[*] ? (@.af_branch == "BR0000000000005")')
from the_table

该函数遍历所有数组元素和 returns 匹配 ? 运算符后指定条件的元素。