Postgresql: actualiza o elimina un valor de un elemento jsonb anidado

Resuelto LiorH asked hace 7 años • 1 respuestas

¿Hay alguna manera de eliminar/actualizar un objeto clave json anidado (no una matriz), por ejemplo, el siguiente json:

{
  "top": {
    "nested": {
       "leaf": 1
    }
  }  
}

¿Cómo eliminaría/actualizaría el elemento hoja?

Lo intenté

SELECT jsonb '{"top": {"nested": {"leaf" : 1}}' - '{top,nested,leaf}'

pero no hubo suerte

LiorH avatar Jul 05 '17 23:07 LiorH
Aceptado

Necesitas usar el #-operador, no -:

SELECT jsonb '{"top": {"nested": {"leaf" : 1}}}' #- '{top,nested,leaf}';
┌─────────────────────────┐
│        ?column?         │
├─────────────────────────┤
│ {"top": {"nested": {}}} │
└─────────────────────────┘
(1 row)

De la documentación :

  • -(dado un textargumento): elimine el par clave/valor o el elemento de cadena del operando izquierdo. Los pares clave/valor coinciden en función de su valor clave.
  • -(dado un intargumento): elimine el elemento de la matriz con el índice especificado (los enteros negativos cuentan desde el final). Genera un error si el contenedor de nivel superior no es una matriz.
  • #-: elimina el campo o elemento con la ruta especificada (para matrices JSON, los enteros negativos cuentan desde el final)
Marth avatar Jul 05 '2017 17:07 Marth