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 匹配 ?
运算符后指定条件的元素。
所以我得到了这个 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 匹配 ?
运算符后指定条件的元素。