Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

111 lines (83 sloc) 3.098 kb

mambo

The best document mapper for DynamoDB.

NPM Build Status

Example

var mambo = require('mambo'),
    Schema = mambo.Schema,
    StringField = mambo.StringField,
    NumberField = mambo.NumberField,
    JSONField = mambo.JSONField,
    DateField = mambo.DateField;

var Comment = new mambo.Model(new Schema(
        'Comments', 'comments', ['post_id', 'created'],
        {
            'post_id': NumberField,
            'created': DateField,
            'comment': StringField,
            'author': StringField,
            'liked_by': JSONField
        }
    ), new Schema('Users', 'users', 'username', {
        'username': StringField,
        'name': StringField,
        'lastCommentPosted': DateField
    })
);

Comment.getAll = function(postId){
    this.objects('comments', postId)
        .limit(5)
        .fetch(function(err, comments){
            console.log('Comments for post ' + postId + ':\n'); console.log(JSON.stringify(comments, null, 4));
        });
};

Comment.post = function(postId, author, comment){
    this.insert('comments', {
        'post_id': postId,
        'created': new Date(),
        'author': author,
        'comment': comment,
        'liked_by': []
    })
    .commit(function(err, res){
        console.log('Comment added!');
    });
};

module.exports = Comment;

Plugins

Distributed Locks

Mutex provides a simple TTL lock like ddbsync, as described in Distributed Locking With DynamoDB

var Mutex = require('mambo').Mutex,
    mutex = new Mutex('some-name', 10);
mutex.lock(function(err){
    if(err) return console.error('Couldn\'t accquire lock');
    // Do some stuff
    mutex.unlock(function(){
        console.log('Unlocked.  Lock away.');
    });
});

Experimental

Sorted Sets

Thanks to the new local secondary indexes, you can implement a sorted set in dynamo like you can with Redis.

var SortedSet = require('mambo').SortedSet,
    d = new Date(),
    songLoves = new SortedSet('loves-' + [
        d.getYear(), d.getMonth(), d.getDay()].join('-'));

songLoves.incryby(1, 2, function(){
    songLoves.incryby(2, 1, function(){
        songLoves.incryby(3, 9, function(){
            songLoves.incryby(3, 1, function(){
                songLoves.range(0, 3, function(err, ids){
                    assert.deepEqual(ids, [3, 1, 2]);
                });
            });
        });
    });
});

Install

 npm install mambo

Testing

git clone
npm install
npm test
Jump to Line
Something went wrong with that request. Please try again.