Drop #82··Datalog-Patterns Cookbook

Datalog-Patterns Cookbook··5 opskrifter til mium-power-users

Team Mut··sidst ændret 2026-06-23

Dette cookbook henvender sig til mium-power-users og udvikler-profiler, der allerede har strejfet [[advanced-query-datalog]] og søger konkrete, kopiérbare eksempler. Fem opskrifter, hver selvstændig — den, der kun har brug for forældreløs-detektoren, springer direkte til opskrift 5. Datalog selv er et logik-programmeringssprog fra 1970'erne; Rich Hickey genopdagede det med Datomic (Cognitect, siden 2012) til praktisk database-hverdag. mium bruger en Datalog-dialekt til at forespørge sit eget blok-indeks.

Opskrifter

De fem opskrifter er uafhængige af hinanden. Pluk det, du har brug for, eller læs lineært — begge rækkefølger virker. Hver opskrift har: et problem, en query, eventuelt et faldgrube-callout.

Opskrift 1··Åbne tasks med frist i det aktuelle kvartal

Standard-sprint-spørgsmålet: hvilke tasks er åbne og skal leveres inden kvartalets udgang? Querien filtrerer over `frist::` i Q-vinduet og `status:: offen`, og returnerer owner.

[:find ?block ?frist ?owner
 :where [?block :frist ?frist]
        [?block :status "offen"]
        [(>= ?frist "2026-04-01")]
        [(<= ?frist "2026-06-30")]
        [?block :owner ?owner]]

Opskrift 2··Top-10 backlink-hubs

Hvilke blokke refereres oftest? Top-10 efter indgående `:links-to`-kanter er de centrale knuder i dit vault — ofte begreber, personer, projekter.

[:find (count ?backlink) ?target
 :where [?backlink :links-to ?target]
 :order-by [(count ?backlink) :desc]
 :limit 10]

Opskrift 3··Audit-trail for en blok

Hvem har ændret hvad og hvornår på en blok? Querien læser transaction-historikken baglæns for et givet blok-ID og returnerer `tx`, `attr`, `value` og `added`-flaget.

[:find ?tx ?attr ?value ?added
 :where [?block :db/id "<((uuid))>"]
        [?tx :tx/affected-block ?block]
        [?tx :tx/attr ?attr]
        [?tx :tx/value ?value]
        [?tx :tx/added ?added]]

Opskrift 4··Tag-aggregering på tværs af vaults

Hvor ofte optræder hvert kunde-tag på tværs af alle vaults? Querien grupperer over `tags::` med namespace-præfikset `#kunde-` og returnerer en sorteret hyppighedsliste.

[:find (count ?block) ?tag
 :where [?block :tags ?tag]
        [(re-pattern "^#kunde-") ?tag]
 :group-by ?tag
 :order-by [(count ?block) :desc]]

Opskrift 5··Forældreløs-note-detektor

Hvilke noter har ingen indgående backlinks og er ikke arkiverede? Disse forældreløse er vaultets blinde ender — kandidater til oprydning, sammenkædning eller arkivering.

[:find ?block ?title
 :where [?block :title ?title]
        [?block :archiv? false]
        (not-join [?block]
          [?other :links-to ?block])]

Når disse opskrifter IKKE passer

Datalog-queries er ikke et universalinstrument. Tre situationer, hvor disse opskrifter ikke bærer:

  1. Fritekst-søgning i blok-indholdet — Datalog filtrerer over properties og kanter, ikke over prosa. Til „find hver blok, der indeholder `Auftragsbestätigung` i teksten”, er mium-fritekst-indekset det rigtige instrument, ikke en Datalog-query.
  2. Meget ustrukturerede vaults uden property-disciplin — alle fem opskrifter forudsætter, at `frist::`, `status::`, `owner::`, `tags::` plejes konsistent. I et vault, hvor 80 % af blokkene ikke bærer nogen properties, returnerer querierne tomme mængder, ikke indsigt. Property-disciplin er forarbejde, ikke en bivirkning.
  3. Ad hoc-udforskninger med uklart spørgsmål — Datalog belønner præcise spørgsmål. Den, der bare vil „se lidt på, hvad der står i vaultet”, kommer hurtigere frem med graf-visningen eller backlink-browsing end med en query, der først skal designes.

Et ærligt spørgsmål

Hvilken af de fem opskrifter passede hos dig, og hvilken løb ud i det tomme? Hvis du sætter en af dem i produktion: hvad parametriserede du anderledes — flyttede Q-vinduet, ændrede tag-namespacet, hævede grænsen? Og hvis ingen passer: hvor overså vi hullet? Cookbook-opskrifter lever af at gnubbe sig op ad rigtige vaults — tilbagemeldinger om, hvilken opskrift #6 der mangler her, er velkomne. Videre i denne bølge: [[advanced-query-datalog]] for sprogets grundlag, [[simple-query]] for den blidere indgang uden Datalog-syntaks.

Diskussion

Henrike Baltus··↪ Vidensledelse··Lünen Forsyning A/Sfor 5 timer siden
Opskrift 5 afslørede 180 forældreløse noter hos os, som aldrig faldt i øjnene i graf-visningen. Den kører nu om natten som cron — interaktivt havde den hængt sessionen.
Jonas Pregler··↪ Research Ops··Adlerblick ApSfor 9 timer siden
Frist-filteret løb først ud i det tomme, indtil jeg opdagede, at den halve mandskab taster 15.07 i stedet for ISO. Re-pattern-for-tjekket var den egentlige fix.
Sibel Karaca··↪ Projektledelse··Vennbruch & Sønner A/Sfor 1 dag siden
Backlink-hubs som ugentlig visning — endelig ser jeg, hvilke begreber der virkelig bærer. Jeg tilføjede ref-kind-filteret, ellers forvrider embeds det.

Forårsskolen er slut. Se Dag 93 → Spil spillet →