PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Entfernen Sie das Schlüsselwertpaar aus dem verschachtelten jsonb-Array in postgresql

Schritt-für-Schritt-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
  1. Erweitern Sie die JSON-Elemente in jeweils eine Zeile. Dadurch werden zwei Spalten generiert:eine für den Schlüssel und eine für den Wert (das JSON-Array)
  2. Erweitern Sie das JSON-Array in jeweils eine Zeile (die das aggregierte JSON-Objekt trennt, aus dem Sie den c entfernen möchten Element)
  3. Sie können den - verwenden Operator, um das Element zu entfernen.
  4. Um das ursprüngliche JSON-Objekt neu zu aggregieren, müssen Sie es rückwärts gruppieren. jsonb_agg() aggregiert die Arrays neu
  5. Schließlich müssen Sie das ursprüngliche JSON-Objekt mit jsonb_object_agg() neu erstellen unter Verwendung der zuvor generierten Schlüsselspalte und der neuen Array-Spalte.