sql >> Database >  >> RDS >> PostgreSQL

Element verwijderen uit array binnen object JSONB

VERWIJDEREN werkt op rijen van een tabel. Daarom kunt u het alleen gebruiken als u de volledige rij wilt verwijderen.

Probeer dit:

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

Nu moet je de positie vinden van de speler die je wilt verwijderen, laten we zeggen dat je Rick wilt met id 2 (min 1 omdat index begint bij 0)

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

Nu kun je dit combineren met een UPDATE statement om het veld bij te werken. Gebruik de min (-) operator om het element op de gewenste index te verwijderen.

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 );

Eindresultaat:

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



  1. Welke factoren kunnen Stored Procedure Recompilation op SQL Server veroorzaken?

  2. php verbinding pooling mysql

  3. Geef een lijst met gehele getallen door van C# naar de opgeslagen procedure van Oracle

  4. utf8_general_ci:welke karakters zijn gelijk?