QueryLeaf è una libreria open source che permette di interrogare database MongoDB utilizzando il linguaggio SQL all'interno di applicazioni Node.js. Questo progetto nasce con l'obiettivo di colmare il divario tra i database relazionali e quelli noSQL, così come di semplificare le sessioni di lavoro con MongoDB senza dover imparare la sintassi nativa delle query.
Come funziona QueryLeaf
Alla base del funzionamento di QueryLeaf abbiamo un processo articolato nel quale una query SQL viene innanzitutto convertita in una struttura di dati astratta (AST, Abstract Syntax Tree) grazie al package node-sql-parser
. Fatto ciò l'AST viene tradotto in comandi MongoDB equivalenti. Questi ultimi sono poi eseguiti utilizzando il driver ufficiale per Node.js. Tale meccanismo permette di gestire le classiche operazioni SQL come SELECT
, INSERT
, UPDATE
e DELETE
pur operando su un database documentale.
Ecco quindi che una query come la seguente:
db.collection('users').find({ age: { $gt: 21 } }, { name: 1, email: 1 })
diventa:
SELECT name, email FROM users WHERE age > 21
QueryLeaf è in grado di gestire strutture di dati anche molto complesse. Con esso è infatti possibile accedere a campi annidati o estrarre valori da array (ad esempio items[0].name
). Sono supportate anche le funzioni aggregate come COUNT
, SUM
, AVG
, MIN
e MAX
. Così come l'equivalente dei JOIN
tra collezioni tramite gli operatori $lookup
e $unwind
di MongoDB.
Installazione e test delle query
La libreria è disponibile in diverse modalità. Può essere così integrata direttamente nel codice JavaScript o TypeScript, utilizzata da riga di comando tramite CLI, interrogata attraverso un server REST o perfino connessa come se si trattasse di un database PostgreSQL grazie a un server compatibile.
Per iniziare, è sufficiente installare il pacchetto @queryleaf/lib
tramite npm:
npm install @queryleaf/lib
Fatto ciò QueryLeaf si aggancia ad un client MongoDB in quanto non ha la possibilità di creare o gestire da solo connessioni dirette con esso. Gli sviluppatori possono anche testare le proprie query con la classe DummyQueryLeaf
che simula l'esecuzione delle interrogazioni senza accedere a un database reale.