This module is suitable when you need:
- a simple schema-less store for quick prototyping (like "minimal mongo")
- to store config data in SQLite instead of .json files
- combined store of document (object tree) & relational data
const treeStore = require('sqlite-tree-store')
const build = treeStore('mydb.db', 'system')
const t = tree() // -- 't' is a root of tree, restored from db (or created empty one)
Explain treeStore params:
'mydb.db' - if not exisis, file will be created in current directory. NOTE: module uses better-sqlite3 under the hood, so you can pass opened BetterSqlite3.Database instance in place of file name
'system' - is a common name for table: 'system', and a view 'v_system'. theese entities created at startup (if not exists).
function tree([path], [depth]) : Proxy
[path] (optional) array of strings representing path to node
[depth] (optional) build to desired depth
so
tree() - build whole tree deep
tree([], 1) - build only 1st level nodes from root
tree(['config']) - build whole node '\config*'
tree(['config', 'mail']) - build whole node '\config\mail*'
In module folder type
\> node cli mydb.db
and feel free to do some tests, shown below, manually copy&paste
All CRUD operations performed through JavaScript (objects & arrays):
\> t.config = {
mail: { host: 'exchange.myoffice.com', port: 25 },
ssl: { certFile:'main.pfx' }
}
now press ctrl+D
to exit program
next run you can use this config because it auto-saved in database
once again:
\> node cli mydb.db
and type
\> t
you will see saved config
{
config: {
mail: { host: 'exchange.myoffice.com', port: 25 },
ssl: { certFile: 'main.pfx' }
}
}
now you can add, modify, delete any node or value of t
in some cases you'll need to disable this auto-db-save feature:
type
\> t.config.mail._.port = 10025
sign ._
semantically means "break binding to the database"
check actual node value by typing t.config.mail.port
\> t.config.mail.port
10025
restart program (ctrl+D
) and check actual saved value
if all done right, port = 10025 is not saved
\> t.config.mail.port
25
in some cases you need to know real db node id (rowid)
sign ._
- also opens acces to node meta-data:
\> config.mail._.port.id
4
To all developers of better-sqlite3
MIT