Querying Roam

Post
No content

Back references (1)

January 7th, 2022

·

This whole website comes from my block database. Right now, it hits an API that reads directly from Roam by loading the whole thing in a headless browser instance since Roam doesn’t have an API.

·

It’s a broken mess, and horribly slow.

·

Luckily, you can export your Roam database. I can automate exporting and uploading to a server, which then can directly read from the db. Not only is this way faster, I could potentially replicate the db across the world on multiple servers.

·

It also makes development way faster. In fact, that’s the primary reason I looked into this. When changing the queries, I’d have to restart the headless browser which takes 20-30 seconds. It’s a terrible development flow, but now I can snapshot the data and reload instantly.

·

Once you export your data as EDN, here’s how you load and query it:

·
let ds = require('datascript');
let x = "foo\n fdfs"
let edn = require('jsedn');

let d = require('fs').readFileSync('./personal.edn', 'utf8');
let data = edn.parse(d);

let conn = ds.conn_from_datoms(
  edn.toJS(edn.atPath(data, ':datoms')),
  edn.toJS(edn.atPath(data, ':schema'))
);

let query = '[:find (pull ?b [*]) :where [_ ":block/uid" "01-06-2022"]]';
let result = ds.q(query, ds.db(conn));

console.log(result);
// [[5389]]