Nautilus: Pelagic Mollusc
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    mambopublic

    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
    

    Keywords

    none

    install

    npm i mambo

    Downloadsweekly downloads

    41

    version

    0.3.2

    license

    none

    repository

    githubgithub

    last publish

    collaborators

    • avatar