sql >> Base de Datos >  >> RDS >> PostgreSQL

Eliminar el par de valores clave de la matriz anidada jsonb en postgresql

demostración paso a paso: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. Expanda los elementos JSON en una fila cada uno. Esto genera dos columnas:una para la clave y otra para el valor (la matriz JSON)
  2. Expanda la matriz JSON en una fila cada una (que separa el objeto JSON agregado del que desea eliminar la c elemento)
  3. Puedes usar el - operador para eliminar el elemento.
  4. Para volver a agregar el objeto JSON original, debe agruparlo al revés. jsonb_agg() reagrega las matrices
  5. Finalmente necesitas reconstruir el objeto JSON original con jsonb_object_agg() utilizando la columna de clave generada anteriormente y la nueva columna de matriz.