Sökvägsoperatorer: -> ->> @>
Navigera i JSONB-dokument med ->, ->>, #>> och kontrollera innehåll med @> och familjen jsonb_path_query.
Sökvägsoperatorer: -> ->> @> är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.
Tre operatorfamiljer
JSONB:s sökvägsoperatorer finns i tre varianter:
->och->>— extraherar med nyckel eller index#>och#>>— extraherar med sökväg@>och?— testar innehåll eller om en nyckel finns
-> returnerar JSONB
Extrahera ett värde och behåll det som JSONB:
SELECT data->'user_id' FROM events;
-- returns JSONB like 42
SELECT data->0 FROM events;
-- first element of a JSONB array->> returnerar text
Extrahera ett värde som TEXT — användbart för typkonvertering:
SELECT data->>'user_id' FROM events;
-- '42' (TEXT)
SELECT (data->>'user_id')::BIGINT FROM events;
-- 42 (BIGINT)#> extrahering via sökväg (JSONB)
Gå igenom flera nivåer med en array av nycklar:
SELECT data #> '{user, address, city}' FROM events;
-- nested JSONB value#>> extrahering via sökväg (TEXT)
Samma som #>, men returnerar TEXT:
SELECT data #>> '{user, address, city}' FROM events;
-- 'Berlin'@> innehåll
"Innehåller dokumentet detta underdokument?" — det mest användbara filtret:
SELECT * FROM events
WHERE data @> '{"type":"login"}';
-- Works for nested matching too:
WHERE data @> '{"user":{"plan":"pro"}}'? nyckelförekomst
Kontrollera om en nyckel finns på toppnivån:
SELECT * FROM events WHERE data ? 'error';
SELECT * FROM events WHERE data ?| ARRAY['a','b']; -- any of these keys
SELECT * FROM events WHERE data ?& ARRAY['a','b']; -- all of these keysJSONB-sökvägsfrågor (jsonb_path_query)
Moderna PostgreSQL stöder SQL/JSON-sökvägsuttryck:
SELECT jsonb_path_query(data, '$.user.tags[*]') FROM events;
SELECT jsonb_path_exists(data, '$.user.tags[*] ? (@ == "admin")') FROM events;Kombinera med index
Ett GIN-index gör @> och ? snabba:
CREATE INDEX events_data_gin ON events USING GIN (data);
-- supports @>, ?, ?|, ?&
CREATE INDEX events_data_path_gin ON events USING GIN (data jsonb_path_ops);
-- smaller, faster — but only supports @>Fråga efter arrayer i JSONB
Hitta dokument vars array innehåller ett värde:
SELECT * FROM events
WHERE data->'tags' @> '["admin"]'::JSONB;
-- Or via path query:
SELECT * FROM events
WHERE jsonb_path_exists(data, '$.tags[*] ? (@ == "admin")');Uppdatera JSONB
jsonb_set, || och - för ändringar:
UPDATE events
SET data = jsonb_set(data, '{user,plan}', '"pro"')
WHERE id = 1;
UPDATE events SET data = data || '{"new_field":true}'::JSONB;
UPDATE events SET data = data - 'old_field';Aggregera JSONB
Samla flera rader till ett JSONB-värde:
SELECT jsonb_agg(data) FROM events WHERE user_id = 42;
SELECT jsonb_object_agg(name, value) FROM settings;Sammanfattning
Sökvägsoperatorer hanterar allt från extrahering till ändringar.
- -> JSONB, ->> TEXT
- #> sökväg, #>> sökväg som TEXT
- @> innehåll (kan indexeras med GIN)
- jsonb_set / || / - för uppdateringar
Snabbkontroll
Vad är skillnaden mellan data->'k' och data->>'k'?
Lär dig SQL med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 46
- Lektioner
- 183
Vanliga frågor
Är lektionen ”Sökvägsoperatorer: -> ->> @>” gratis?
Ja – hela texten till ”Sökvägsoperatorer: -> ->> @>” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Sökvägsoperatorer: -> ->> @>”?
Navigera i JSONB-dokument med ->, ->>, #>> och kontrollera innehåll med @> och familjen jsonb_path_query. Ni övar på SQL Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig SQL Academy?
Du behöver inga förkunskaper. Utbildningen i SQL Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Sökvägsoperatorer: -> ->> @>”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här SQL Academy-lektionen?
Ja. Varje SQL Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- JSONB kontra JSON: när används vilket?
- Sökvägsoperatorer: -> ->> @>
- Indexering av JSONB med GIN
- Datamodellering: när JSONB är bättre än normalisering