Some Light Abstraction for RethinkDB
The RethinkDB Node driver is already very simple to use, but there are methods that I wish I "just had" at the ready. Those are:
- Query, which returns an array
- First, Exists
- Save, which upserts a record
- Automatic table/db config
- DB Manipulation (Create/Drop)
So I created it. That's what we have here.
Usage
Install using
npm install secondthought --save
To use this in your code, just configure what you need:
var db = require("second-thought");
db.connect({db : "test"}, function(err,db){
db.foo.save({name : "Mike"}, function(err,saved){
console.log(saved.id);
});
});
Each table on your DB object is a full-blown RethinkDB table, so you can step outside the abstraction at any point:
db.openConnection(function(err,conn){
db.foo.eqJoin('bar_id', db.bar).run(conn, function(err,cursor){
cursor.toArray(function(err,array){
conn.close();
});
});
});
In addition you can do all kinds of fun things, like...
db.connect({db : "test"}, function(err, db){
db.install(['foo', 'bar'], function(err,result){
});
});
db.connect({db : "test"}, function(err,db){
db.foo.index("email", function(err, indexed){
});
});
Basic Queries
I've tried to keep the API light and simple - with just a bit of sugar to keep the repetetive stuff to a minimum:
db.connect({db : "test", function(err,db){
db.foo.query({category : "beer"}, function(err,beers){
});
db.foo.first({email : "rob@tekpub.com"}, function(err,rob){
});
db.foo.exists({name : "bill"}, function(err, exists){
});
db.foo.destroy({id : "some-id"}, function(err,destroyed){
});
db.foo.destroyAll(function(err,destroyed){
});
db.foo.updateOnly({name : "Stevie"}, "some-id", function(err,result){
});
});
Have a look at the tests to see a bit more
Wanna Help?
Just do me a favor and open a PR with some ideas and hopefully a test or two. Thanks!