A simple Object Data Mapper for Couchbase

Usage no npm install needed!

<script type="module">
  import couchbaseOdm from '';



A simple Object Data Mapper for Couchbase.


Simply pull this repository or install with npm install couchbase-odm.


Creating a model

var User = odm.createModel('User', { name: 'String',
                          username: { type: 'String', index: true } }, couchbase_connection);

Chain .setupViews() onto the end of createModel(...) to automatically set up views based on indexes and import existing views from Couchbase.

Adding static functions

User.sayHello = function() { console.log('My name is '+; };

Adding an object

var u = new User({ name: 'Jesse' });
u.username = 'jessevandersar';

console.log(u._id); /* --> automatically generated UUIDv4-id */
console.log(u._type); /* --> 'User' */

u.sayHello(); /* --> 'My name is Jesse' */ {
  console.log(result); /* { object: <saved object>, result: <CAS> } */

Retrieving and updating an object

User.getById(id, function(u) {
  u.username = 'new_username';;

Deleting an object

User.getById(id, function(u) {


Adding the 'index'-option to a field, as with the 'username'-field in the example, automatically creates a very basic view for querying this object-type with the field as a key. Note that calling .setupViews() on the model is a prerequisite.

Querying an object type (view)

User.getByUsername('jessevandersar', function(results) {

Secondary view options (like limit, descending and stale) can be added as an object in the second parameter.

An 'all'-view will be added by default, usable with User.getAll(...). Also, views that already exist in the design document will be automatically imported from Couchbase.

Note: imported views with names containing underscores will be usable in camelcase with User.specificView(key, callback).


This module is in a very early state. It hasn't been tested in production yet, but has worked for me during development, and has served as a nice excercise in working with Couchbase and creating Node modules. Please let me know about your thoughts and/or bugs that you've encountered!

Github repo: