SkillAgentSearch skills...

Jugglingdb

Multi-database ORM for nodejs: redis, mongodb, mysql, sqlite3, postgresql, arango, in-memory...

Install / Use

/learn @1602/Jugglingdb
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

[![NPM Version][npm-image]][npm-url] [![NPM Downloads][downloads-image]][downloads-url] [![Build status][build-image]][build-url] [![Test Coverage][coveralls-image]][coveralls-url]

About

JugglingDB is cross-db ORM for nodejs, providing common interface to access most popular database formats. Currently supported are: mysql, sqlite3, postgres, mongodb, redis and js-memory-storage (yep, self-written engine for test-usage only). You can add your favorite database adapter, checkout one of the existing adapters to learn how.

Jugglingdb also works on client-side (using WebService and Memory adapters), which allows to write rich client-side apps talking to server using JSON API.

Installation

npm install jugglingdb

and you should install appropriate adapter, for example for redis:

npm install jugglingdb-redis-hq

check following list of available adapters

JugglingDB adapters

<table> <thead> <tr> <th>Database type</th> <th>Package name</th> <th>Maintainer</th> <th>Build status / coverage</th> </tr> </thead> <tbody> <!-- ArangoDB --> <tr> <td><a href="http://www.arangodb.org/"><img width="16" height="16" src="https://www.arangodb.com/wp-content/uploads/2016/03/small-1.png" style="vertical-align:middle" alt="ArangoDB" /></a> ArangoDB</td> <td><a href="https://github.com/m0ppers/jugglingdb-arango">jugglingdb-arango</a></td> <td><a href="https://github.com/m0ppers">Andreas Streichardt</a></td> <td><a href="https://travis-ci.org/m0ppers/jugglingdb-arango"><img src="https://travis-ci.org/m0ppers/jugglingdb-arango.svg?branch=master" alt="Build Status" /></a></td> </tr> <!-- Firebird --> <tr> <td><a href="http://firebirdsql.org"><img src="http://firebirdsql.org/favicon.ico" alt="Firebird"/></a> Firebird</td> <td><a href="http://github.com/hgourvest/jugglingdb-firebird">jugglingdb-firebird</a></td> <td><a href="http://github.com/hgourvest">Henri Gourvest</a></td> </tr> <!-- MongoDB --> <tr> <td><a href="http://www.mongodb.org"><img width="16" height="16" src="https://www.mongodb.com/assets/images/global/favicon.ico" alt="MongoDB" /></a> MongoDB</td> <td><a href="https://github.com/jugglingdb/mongodb-adapter">jugglingdb-mongodb</a></td> <td><a href="https://github.com/1602">Anatoliy Chakkaev</a></td> <td><a href="https://circleci.com/gh/jugglingdb/mongodb-adapter"><img src="https://circleci.com/gh/jugglingdb/mongodb-adapter.svg?&style=shield" alt="Build Status" /></a> <a href='https://coveralls.io/github/jugglingdb/mongodb-adapter?branch=master'><img src='https://coveralls.io/repos/github/jugglingdb/mongodb-adapter/badge.svg?branch=master' alt='Coverage Status' /></a></td> </tr> <!-- MySQL --> <tr> <td><a href="http://www.mysql.com/"><img width="16" height="16" src="http://www.mysql.com/common/themes/sakila/favicon.ico" style="vertical-align:middle"" alt="MySQL" /></a> MySQL</td> <td><a href="https://github.com/jugglingdb/mysql-adapter">jugglingdb-mysql</a></td> <td><a href="https://github.com/dgsan">dgsan</a></td> <td><a href="https://circleci.com/gh/jugglingdb/mysql-adapter"><img src="https://circleci.com/gh/jugglingdb/mysql-adapter.svg?style=shield" alt="Build Status" /></a> <a href='https://coveralls.io/github/jugglingdb/mysql-adapter?branch=master'><img src='https://coveralls.io/repos/github/jugglingdb/mysql-adapter/badge.svg?branch=master' alt='Coverage Status' /></a></td> </tr> <!-- CouchDB / nano --> <tr> <td><a href="http://couchdb.apache.org/"><img width="16" src="http://couchdb.apache.org/favicon.ico" style="vertical-align:middle"" alt="CouchDB" /></a> CouchDB / nano</td> <td><a href="https://github.com/jugglingdb/nano-adapter">jugglingdb-nano</a></td> <td><a href="https://github.com/nrw">Nicholas Westlake</a></td> <td><a href="https://travis-ci.org/jugglingdb/nano-adapter"><img src="https://travis-ci.org/jugglingdb/nano-adapter.svg?branch=master" alt="Build Status" /></a></td> </tr> <!-- PostgreSQL --> <tr> <td><a href="http://www.postgresql.org/"><img src="http://www.postgresql.org/favicon.ico" style="vertical-align:middle"" alt="PostgreSQL" /></a> PostgreSQL</td> <td><a href="https://github.com/jugglingdb/postgres-adapter">jugglingdb-postgres</a></td> <td><a href="https://github.com/1602">Anatoliy Chakkaev</a></td> <td><a href="https://circleci.com/gh/jugglingdb/postgres-adapter"><img src="https://circleci.com/gh/jugglingdb/postgres-adapter.svg?style=shield" alt="Build Status" /></a> <a href='https://coveralls.io/github/jugglingdb/postgres-adapter?branch=master'><img src='https://coveralls.io/repos/github/jugglingdb/postgres-adapter/badge.svg?branch=master' alt='Coverage Status' /></a></td> </tr> <!-- Redis --> <tr> <td><a href="http://redis.io/"><img src="http://redis.io/images/favicon.png" alt="Redis" /></a> Redis</td> <td><a href="https://github.com/jugglingdb/redis-hq-adapter">jugglingdb-redis-hq</a></td> <td><a href="https://github.com/1602">Anatoliy Chakkaev</a></td> <td><a href="https://circleci.com/gh/jugglingdb/redis-hq-adapter"><img src="https://circleci.com/gh/jugglingdb/redis-hq-adapter.svg?style=shield" alt="Build Status" /></a> <a href='https://coveralls.io/github/jugglingdb/redis-hq-adapter?branch=master'><img src='https://coveralls.io/repos/github/jugglingdb/redis-hq-adapter/badge.svg?branch=master' alt='Coverage Status' /></a></td> </tr> <!-- RethinkDB --> <tr> <td><a href="http://www.rethinkdb.com/"><img src="http://www.rethinkdb.com/favicon.ico" alt="RethinkDB" width="16" height="16" /></a> RethinkDB</td> <td><a href="https://github.com/fuwaneko/jugglingdb-rethink">jugglingdb-rethink</a></td> <td><a href="https://github.com/fuwaneko">Tewi Inaba</a></td> <td><a href="https://travis-ci.org/fuwaneko/jugglingdb-rethink"><img src="https://travis-ci.org/fuwaneko/jugglingdb-rethink.svg?branch=master" alt="Build Status" /></a></td> </tr> <!-- SQLite 3 --> <tr> <td><a href="http://www.sqlite.org/"><img width="16" src="https://www.sqlmaestro.com/data/181/1249905374-32x32.gif" style="vertical-align:middle" alt="SQLite" /></a> SQLite</td> <td><a href="https://github.com/jugglingdb/sqlite3-adapter">jugglingdb-sqlite3</a></td> <td><a href="https://github.com/anatoliychakkaev">Anatoliy Chakkaev</a></td> <td><a href="https://circleci.com/gh/jugglingdb/sqlite3-adapter"><img src="https://circleci.com/gh/jugglingdb/sqlite3-adapter.svg?style=shield" alt="Build Status" /></a> <a href='https://coveralls.io/github/jugglingdb/sqlite3-adapter?branch=master'><img src='https://coveralls.io/repos/github/jugglingdb/sqlite3-adapter/badge.svg?branch=master' alt='Coverage Status' /></a></td> </tr> <tr> <td>WebService</td> <td>built-in</td> <td><a href="https://github.com/1602">Anatoliy Chakkaev</a></td> <td>n/a</td> </tr> <tr> <td>Memory (bogus)</td> <td>built-in</td> <td><a href="https://github.com/1602">Anatoliy Chakkaev</a></td> <td>n/a</td> </tr> <!-- DynamoDB --> <tr> <td><a href="http://en.wikipedia.org/wiki/Amazon_DynamoDB"> DynamoDB </a></td> <td><a href="https://github.com/tmpaul/jugglingdb-dynamodb">jugglingdb-dynamodb</a></td> <td><a href="https://github.com/tmpaul">tmpaul</a></td> <td><a href="https://travis-ci.org/tmpaul/jugglingdb-dynamodb"><img src="https://travis-ci.org/tmpaul/jugglingdb-dynamodb.svg?branch=master" alt="Build Status" /></a></td> </tr> <tr> <td><a href="http://www.microsoft.com/en-ca/server-cloud/products/sql-server/">SQL Server<a></td> <td><a href="https://github.com/Quadrus/jugglingdb-mssql">jugglingdb-mssql</a></td> <td><a href="https://github.com/Quadrus">Quadrus</a></td> <td>n/a</td> </tr> <tr> <td><a href="https://msdn.microsoft.com/en-us/library/azure/jj553018.aspx">Azure Table Storage<a></td> <td><a href="https://github.com/yads/jugglingdb-azure-tablestorage">jugglingdb-azure-tablestorage</a></td> <td><a href="https://github.com/yads">Vadim Kazakov</a></td> <td>n/a</td> </tr> </tbody> </table>

Participation

  • Check status of project on trello board: https://trello.com/board/jugglingdb/4f0a0b1e27d3103c64288388
  • Make sure all tests pass (npm test command)
  • Feel free to vote and comment on cards (tickets/issues), if you want to join team -- send me a message with your email.

If you want to create your own jugglingdb adapter, you should publish your adapter package with name jugglingdb-ADAPTERNAME. Creating adapter is simple, check jugglingdb/redis-adapter for example. JugglingDB core exports common tests each adapter should pass, you could create your adapter in TDD style, check that adapter pass all tests defined in test/common_test.js.

Usage

var Schema = require('jugglingdb').Schema;
var schema = new Schema('redis', {port: 6379}); //port number depends on your configuration
// define models
var Post = schema.define('Post', {
    title:     { type: String, length: 255 },
    content:   { type: Schema.Text },
    date:      { type: Date,    default: function () { return new Date;} },
    timestamp: { type: Number,  default: Date.now },
    published: { type: Boolean, default: false, index: true }
});

// simplier way to describe model
var User = schema.define('User', {
    name:         String,
    bio:          Schema.Text,
    approved:     Boolean,
    joinedAt:     Date,
    age:          Number
}, {
    restPath: '/users' // tell WebService adapter which path use as API endpoint
});

var Group = schema.define('Group', {name: String});

// define any custom method
User.prototype.getNameAndAge = function () {
    return this.name
View on GitHub
GitHub Stars2.0k
CategoryData
Updated2mo ago
Forks240

Languages

JavaScript

Security Score

80/100

Audited on Jan 19, 2026

No findings