trin-for-trin demo:db<>fiddle
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
- Udvid JSON-elementerne til en række hver. Dette genererer to kolonner:En for nøglen og en for værdien (JSON-arrayet)
- Udvid JSON-arrayet til én række hver (som adskiller det aggregerede JSON-objekt, hvorfra du vil fjerne
c
) element)
- Du kan bruge
-
operatør for at fjerne elementet.
- For at samle det originale JSON-objekt igen, skal du gruppere det baglæns.
jsonb_agg()
samler arrayerne igen
- Til sidst skal du genopbygge det originale JSON-objekt med
jsonb_object_agg()
ved at bruge den tidligere genererede nøglekolonne og den nye matrixkolonne.