Skip to content
RethinkDB integration for Meteor
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.npm/package
_build
driver-source
img
tests
README.md
init.js
monkey-patching.js
package.js
reql-client-errors.js
rethink-client-utils.js
rethink-client.js
rethink.js
run-tests.sh

README.md

RethinkDB integration for Meteor

A full-stack RethinkDB integration with Meteor. With livequery, publish/subscribe, latency compensation and client-side cache.

Work in progress. Not ready for its prime-time.

Intro

meteor add simple:rethink

Demo app: https://github.com/Slava/meteor-rethinkdb-demo

This packages aims to provide a first-class experience working with RethinkDB building full-stack real-time web and mobile apps on the Meteor framework.

The goals and plans of this package:

  • Raw access to RethinkDB on the server, no ORMs
  • Client-side cache accessible with the RethinkDB query language (ReQL)
  • Use Meteor's publications/subscriptions model
  • Take advantage of Meteor's "Latency Compensation" propeties (optimistic client-side updates without waiting for the server to respond)
  • User accounts stored in RethinkDB instead of MongoDB (planned)
  1. Using the package
  2. Setup
  3. Tables
  4. Queries
  5. Publishing
  6. Package development
  7. Contributions

Using the package

Setup

Adding a package is as simple as running the following command in your Meteor app's directory:

meteor add simple:rethink

The package will connect to a RethinkDB instance by looking at the RETHINK_URL environment variable.

env RETHINK_URL=rethinkdb://user:password@hostname:port/database meteor run

If you have an instance of RethinkDB running locally on your development computer, the package will automatically connect to the test db on localhost:28015.

To install and run RethinkDB on a Mac:

$ brew update
$ brew install rethinkdb
$ rethinkdb

Or install on another OS.

Tables

When using new Mongo.Collection('items'), the collection is automatically created in MongoDB if it does not exist. With RethinkDB, you must create the table yourself beforehand. You can do so in the web UI:

http://localhost:8080/#tables

Then declare the table:

Players = new Rethink.Table('players');

Queries

Query the data using the Javascript API for ReQL:

console.log('Number of players:', Players.count().run());
console.log('All players:', Players.run().toArray());
console.log('Updating players:', Players.filter({team: 'Knicks'}).update({city: 'NYC'}).run());

.fetch() is a shortcut for .run().toArray(), fetching the documents without turning the cursor into an array:

console.log('All players:', Players.fetch());

Construct more complex queries with Rethink.r:

var r = Rethink.r;

// Top Players
Players.orderBy(r.desc('score')).limit(3).fetch();

Publishing

Currently, observations (the type of queries you return from publish functions) can only be point queries (.get(primaryKey)) or orderBy & limit queries (.orderBy({ index: 'id' }).limit(4)).

Package development

Since the package relies on the RethinkDB node driver and Reqlite to build the package, make sure npm is available and ready for use. Then run the build script:

./driver-source/build.sh

This script will output a built version of Reqlite and driver for the client-side cache.

Running tests

Build the package first, then run the tests.

./driver-source/build.sh
meteor test-packages --driver-package respondly:test-reporter

Contributions

Currently this project is welcoming contributions to Reqlite, the mini-implementation of RethinkDB in browser that this package is using on the client-side for DB operations simulations. Also, this project would appreciate more tests testing out different commands.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.