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

    levelpluspublic

    levelplus

    Adds atomic updates to levelup database

    Installation

    You can install levelplus through npm:

    $ npm install levelplus
    

    Example

    Atomic Updates

    You can do atomic upates of values using db.update with a value:

    var db = levelplus(levelup(dbPath,
      { keyEncoding: 'utf8', valueEncoding: 'json' }));
     
    db.update('mykey', 1, function (err) {
      db.update('mykey', 2, function (err) {
        db.get('mykey', function (err, value) {
          expect(value).to.equal(2);
        });
      });
    });
     

    Atomic Increments

    You can do atomic updates using db.inc;

    var db = levelplus(levelup(dbPath,
      { keyEncoding: 'utf8', valueEncoding: 'json' }));
     
    var c = 100;
    for (var i = 0; i < 100; i++) {
      db.inc('mykey', 0, function (err) {
        if (err) return done(err);
        --|| next();
      });
    }
     
    function next() {
      db.get('mykey', function (err, value) {
        expect(value).to.equal(100);
        done();
      });
    }

    Atomic Array Pushes

    You can do atomic updates using db.push:

    var db = levelplus(levelup(dbPath,
      { keyEncoding: 'utf8', valueEncoding: 'json' }));
     
    var c = 100;
    for (var i = 0; i < 100; i++) {
      db.push('mykey', i, function (err) {
        if (err) return done(err);
        --|| next();
      });
    }
     
    function next() {
      db.get('mykey', function (err, value) {
        if (err) return done(err);
        expect(value).to.be.instanceof(Array);
        expect(value.length).to.equal(100);
        value.forEach(function (n) {
          expect(n).to.be.gte(0);
          expect(n).to.be.lte(100);
        });
        done();
      });
    }

    Atomic Set Addition

    You can do atomic updates using db.sadd (adds to a set):

    var db = levelplus(levelup(dbPath,
      { keyEncoding: 'utf8', valueEncoding: 'json' }));
     
    var c = 100;
    for (var i = 0; i < 100; i++) {
      db.sadd('mykey', i % 5, function (err) {
        --|| next();
      });
    }
     
    function next() {
      db.get('mykey', function (err, value) {
        expect(value).to.be.instanceof(Array);
        expect(value.length).to.equal(5);
        value.forEach(function (n) {
          expect(n).to.be.gte(0);
          expect(n).to.be.lt(5);
        });
        done();
      });
    }

    Atomic Updates Using Custom Functions

    You can do atomic updates using db.update with a custom update function:

    var db = levelplus(levelup(dbPath,
      { keyEncoding: 'utf8', valueEncoding: 'json' }));
     
    function times(multiplier, init) {
      return function (data) {
        if (data === undefined) {
          data = init;
        }
     
        return data*multiplier;
      };
    }
     
    db.update('mykey', times(2, 42), function (err) {
      if (err) return done(err);
      db.get('mykey', function (err, value) {
        if (err) return done(err);
        expect(value).to.equal(84);
        done();
      });
    });

    Keywords

    none

    install

    npm i levelplus

    Downloadsweekly downloads

    19

    version

    0.0.5

    license

    none

    repository

    githubgithub

    last publish

    collaborators

    • avatar
    • avatar