есть поле data типа jsonb:
[{ "id": "229D5ZArWZh4b3bDfUMMPh", "name": "John"}, {"id": "xQeSfWa1E3NSm2AhpcqRvd","name": "John2"}]
Как мне удалить объект в массиве у которого name равен john ? Благодарю
Функций для удаления элементов jsonb, да и еще и по условию, к сожалению нет. Но можно это сделать так: jsonb_path_query_array(data, '$[*] ? (@.name != "John")') (SELECT jsonb_agg(elem) FROM jsonb_array_elements(data) elem WHERE elem->>'name' <> 'John')
Оказалось, что есть еще вариант удаления по индексу специальным вариантом функции jsonb_set(), но для это придется предварительно найти нужный индекс массива подзапросом, что намного сложнее вариантов выше, да и работать должно медленее: jsonb_set_lax(data, ARRAY[index], NULL, null_value_treatment => 'delete_key')
Обсуждают сегодня