SQL Academy · Lektion

Sökvägsoperatorer: -> ->> @>

Navigera i JSONB-dokument med ->, ->>, #>> och kontrollera innehåll med @> och familjen jsonb_path_query.

Lektion 2 av 414 steg

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 keys

JSONB-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'?

Gratis att börja

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

  1. JSONB kontra JSON: när används vilket?
  2. Sökvägsoperatorer: -> ->> @>
  3. Indexering av JSONB med GIN
  4. Datamodellering: när JSONB är bättre än normalisering
← Tillbaka till SQL Academy