The definitive source of the best
JavaScript libraries, frameworks, and plugins.

  • ×

    MongoDB-like interface for HTML5 IndexedDB
    Filed under 

    • 🔾27%Overall
    • 1,067
    • 94.7 days
    • 🕩83
    • 👥1


    ZangoDB is a MongoDB-like interface for HTML5 IndexedDB that supports most of the familiar filtering, projection, sorting, updating and aggregation features of MongoDB, for usage in the web browser.


    let db = new zango.Db('mydb', { people: ['age'] });
    let people = db.collection('people');
    let docs = [
        { name: 'Frank', age: 20 },
        { name: 'Thomas', age: 33 },
        { name: 'Todd', age: 33 },
        { name: 'John', age: 28 },
        { name: 'Peter', age: 33 },
        { name: 'George', age: 28 }
    people.insert(docs).then(() => {
        return people.find({
            name: { $ne: 'John' },
            age: { $gt: 20 }
            _id: { age: '$age' },
            count: { $sum: 1 }
            _id: 0,
            age: '$_id.age'
            age: -1
        }).forEach(doc => console.log('doc:', doc));
    }).catch(error => console.error(error));

    Which outputs:

    doc: { count: 3, age: 33 }
    doc: { count: 1, age: 28 }


    ZangoDB is available as an npm package, and the web-browser build can be downloaded here or embedded:

    <script src=""></script>

    For certain web browsers, such as Internet Explorer, the Babel polyfill is required and must be loaded before ZangoDB:

    <script src=""></script>

    ZangoDB then can be accessed using the global variable zango.

    To install ZangoDB for usage with node:

    $ npm install zangodb

    In both cases, an implementation of IndexedDB is required. For environments without a native implementation of IndexedDB, Fake IndexedDB can be used:

    global.indexedDB = require('fake-indexeddb');
    global.IDBKeyRange = require('fake-indexeddb/lib/FDBKeyRange');

    Document Language Operators

    Filter Operators

    The following filter operators are supported: $and, $or, $not, $nor, $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $elemMatch, $regex, and $exists.

    Expression Operators

    Expression operators can be used in combination with the group and projection operators.

    The following expression operators are supported: $literal, $add, $subtract, $multiply, $divide, $mod, $abs, $ceil, $floor, $ln, $log10, $pow, $sqrt, $trunc, $concat, $toLower, $toUpper, $concatArrays, $dayOfMonth, $year, $month, $hour, $minute, $second, and $millisecond.

    Update Operators

    The following update operators are supported: $set, $unset, $rename, $inc, $mul, $min, $max, $push, $pop, $pullAll, $pull, and $addToSet.

    Group Operators

    The following group operators are supported: $sum, $avg, $min, $max, $push, and $addToSet.

    Aggregation Pipeline Stages

    The following aggregation pipeline stages are supported: $match, $project, $group, $unwind, $sort, $skip, and $limit.


    MIT, please view the LICENSE file.

    Show All