PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Rimuovere la coppia di valori chiave dall'array nidificato jsonb in postgresql

demo passo passo:db<>violino

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. Espandi gli elementi JSON in una riga ciascuno. Questo genera due colonne:una per la chiave e una per il valore (l'array JSON)
  2. Espandi l'array JSON in una riga ciascuna (che separa l'oggetto JSON aggregato da cui desideri rimuovere il c elemento)
  3. Puoi usare il - operatore per rimuovere l'elemento.
  4. Per riaggregare l'oggetto JSON originale, devi raggrupparlo all'indietro. jsonb_agg() riaggrega gli array
  5. Infine devi ricostruire l'oggetto JSON originale con jsonb_object_agg() utilizzando la colonna chiave generata in precedenza e la nuova colonna dell'array.