Direct naar de hoofdinhoud
Module 15 · Les 2 van 257/57 in de cursus~15 min
Modulelessen (2/2)

JSON-aggregatiefuncties

JSON-aggregatiefuncties

De integratie is bidirectioneel. De database hoeft zich niet te beperken tot het parseren van JSON: hij kan deze bouwen. Stel je voor dat jouw API en Node.js niet het vuile, intensieve werk hoefden te doen van het serialiseren van geneste objecten in JSON, omdat de DB ze al rechtstreeks vanaf schijf had gebouwd.

Objecten en arrays bouwen

In plaats van de klassieke massaaggregatie of tekenreeksaaneenschakeling (String_agg), wenden we ons tot deze functies:

  • json_build_object(key, value, ...) of jsonb_build_object(...)
  • json_agg(...) of jsonb_agg(...)
SQL
SELECT json_build_object('name', first_name, 'city', city) AS data
FROM customers;

Er worden rijen afgedrukt met { "name": "...", "city": "..." }, perfect compatibel.

Oefening#sql.m15.l2.e1
Pogingen: 0Laden…

Retourneer de gegevens vanuit de tabel 'klanten' als JSON-rijen, toegewezen met \`json_build_object\`. Wijs twee sleutels toe: 'naam' gebonden aan 'voornaam', en 'mail' gebonden aan 'e-mail'. Gebruik \`AS customer_doc\` voor de kolom.

Editor laden…
Toon hint

json_build_object('naam', voornaam, 'mail', e-mail)

Oplossing beschikbaar na 3 pogingen

Oefening#sql.m15.l2.e2
Pogingen: 0Laden…

Voor elke bestelling (\`order_id\`) bouwt u alle \`product_id\`s in één eenheid op. Voer vanuit de tabel 'order_items' \`GROUP BY order_id\` uit. Selecteer vervolgens \`order_id\` en verzamel alleen de \`product_id\`-gegevens in een JSON-array (JSON_AGG). Noem de array \`producten\`.

Editor laden…
Toon hint

JSON_AGG(product_id) plus een klassieke groep door om de gegevens te verzamelen.

Oplossing beschikbaar na 3 pogingen