steg-för-steg-demo:db<>fiol
SELECT
jsonb_object_agg(key, a) -- 5
FROM (
SELECT
mydata,
key,
jsonb_agg(a_elems.value - 'c') as a -- 3/4
FROM
mytable,
jsonb_each(mydata) elems, -- 1
jsonb_array_elements(elems.value) AS a_elems -- 2
GROUP BY mydata, key -- 4
) s
GROUP BY mydata -- 5
- Utöka JSON-elementen till en rad vardera. Detta genererar två kolumner:en för nyckeln och en för värdet (JSON-matrisen)
- Utöka JSON-matrisen till en rad vardera (som skiljer det aggregerade JSON-objektet från vilket du vill ta bort
c
element)
- Du kan använda
-
operatör för att ta bort elementet.
- För att återaggregera det ursprungliga JSON-objektet måste du gruppera det bakåt.
jsonb_agg()
återaggregerar arrayerna
- Slutligen måste du bygga om det ursprungliga JSON-objektet med
jsonb_object_agg()
med den tidigare genererade nyckelkolumnen och den nya arraykolumnen.