PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Премахване на елемент от масив в обект JSONB

ИЗТРИВАНЕ работи върху редове от таблица. Следователно не можете да го използвате, освен ако не искате да премахнете целия ред.

Опитайте това:

create temp table testing as
select 
    '{ "playersContainer": {
        "players": [
            {
                "id": "1",
                "name": "Nick"
            },
            {
                "id": "2",
                "name": "Rick"
            },
            {
                "id": "3",
                "name": "Trick"
            }
        ]
     }}'::jsonb as value;

Сега трябва да намерите позицията на играча, който искате да премахнете, да кажем, че искате Рик с id 2 (минус 1, защото индексът започва от 0)

select position-1 from testing, jsonb_array_elements(value->'playersContainer'->'players') with ordinality arr(elem, position) WHERE elem->>'id' = '2';

Сега можете да комбинирате това с UPDATE израз за актуализиране на полето. Използвайте оператора минус (-), за да премахнете елемента при желания индекс.

UPDATE testing SET value = jsonb_set(value, '{playersContainer,players}', (value->'playersContainer'->'players') - (select position-1 from testing, jsonb_array_elements(value->'playersContainer'->'players') with ordinality arr(elem, position) WHERE elem->>'id' = '2')::int );

Краен резултат:

{
    "playersContainer":{
        "players":[
            {
                "id":"1",
                "name":"Nick"
            },
            {
                "id":"3",
                "name":"Trick"
            }
        ]
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Влияние на производителността на изгледа върху агрегатната функция спрямо ограничаването на набора от резултати

  2. Функцията Postgresql не връща таблица при избор

  3. PostgreSQL конвертира колони в редове? Транспониране?

  4. PostgreSQL - Празна таблица

  5. Динамично генериране на колони за кръстосана таблица в PostgreSQL