@webgap/jsonfs

0.1.7 • Public • Published

json_file_system

Fork for using with WebGAP.

json_file_system (JSON FileDB like MongoDB)

Nodejs JSON Database like MongoDB, but only using the FileSystem (File IO).


### db.collection.save()


### db.collection.findOne()


### db.collection.find({})


### db.collection.update({})


### db.collection.remove({})


### db.kursus


### node try.js


### collection.js (Data Access Layer)


### node console>

Inspirations and Credits

##Contents

Getting Started

clone the source code locally :

$ git clone https://github.com/Jalalhejazi/jsonfs.git

Install the module globally :

$ npm install json_file_system -g
// to use the globally installed use: json_file_system
// to use the locally from git use: lib/jsonfs.js

var db = require('json_file_system');

db = db.connect('/path/to/db-folder', ['collection-name']);

// you can access the traditional JSON DB methods here
db.connect('','');

Documentation

Connect to DB

db.connect(pathToFolder, ['filename']);

Filename will be the name of the JSON file. You can omit the extension, jsonfs will take care of it for you.

var db = require('json_file_system');
db = db.connect('/demos/db', ['articles']);
// or simply
db.connect('/demos/db', ['articles']);

This will check for a directory at given path, if it does not exits, jsonfs will throw an error and exit.

If the directory exists but the file/collection does not exist, jsonfs will create it for you.

Load Collections

Alternatively you can also load collections like

var db = require('jsonfs');
// this
db = db.connect('/demos/db');
db.loadCollections(['articles']);
//or
db.connect('/demos/db');
db.loadCollections(['articles']);
//or
db.connect('/demos/db')
  .loadCollections(['articles']);
//or
db.connect('/demos/db', ['articles']);

Load Multiple Collections

var db = require('jsonfs');
db.connect('/demos/db', ['articles','comments','users']);

Write/Save to Collection

db.collectioName.save(object);

Once you have loaded a collection, you can access the collection's methods using the dot notation like

db.[collectionName].[methodname]

To save the data, you can use

var db = require('jsonfs');
db.connect('db', ['articles']);
var article = {
    title : "jsonfs works",
    published : "today",
    rating : "5 stars"
}
db.articles.save(article);
// or
db.articles.save([article]);

The saved data will be

[
    {
        "title": "jsonfs works",
        "published": "today",
        "rating": "5 stars",
        "_id": "0f6047c6c69149f0be0c8f5943be91be"
    }
]

You can also save multiple objects at once like

var db = require('jsonfs');
db.connect('db', ['articles']);
var article1 = {
    title : 'jsonfs works',
    published : 'today',
    rating : '5 stars'
}

var article2 = {
    title : 'jsonfs works',
    published : 'yesterday',
    rating : '5 stars'
}

var article3 = {
    title : 'jsonfs works',
    published : 'today',
    rating : '4 stars'
}
db.articles.save([article1, article2, article3]);

And this will return the inserted objects

[ { title: 'jsonfs works',
    published: 'today',
    rating: '4 stars',
    _id: 'b1cdbb3525b84e8c822fc78896d0ca7b' },
  { title: 'jsonfs works',
    published: 'yesterday',
    rating: '5 stars',
    _id: '42997c62e1714e9f9d88bf3b87901f3b' },
  { title: 'jsonfs works',
    published: 'today',
    rating: '5 stars',
    _id: '4ca1c1597ddc4020bc41b4418e7a568e' } ]

Read from Collection

There are 2 methods available for reading the JSON collection

  • db.collectioName.find(query)
  • db.collectioName.findOne(query)

db.collectioName.find()

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.find();

This will return all the records

[{
    title: 'jsonfs works',
    published: 'today',
    rating: '5 stars',
    _id: '0f6047c6c69149f0be0c8f5943be91be'
}]

You can also query with a criteria like

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.find({rating : "5 stars"});

This will return all the articles which have a rating of 5.

db.collectioName.findOne(query)

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.findOne();

If you do not pass a query, jsonfs will return the first article in the collection. If you pass a query, it will return first article in the filtered data

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.findOne({_id: '0f6047c6c69149f0be0c8f5943be91be'});

Update Collection

db.collectioName.update(query, data, options);

You can also update one or many objects in the collection

options = {
    multi: false, // update multiple - default false
    upsert: false // if object is not found, add it (update-insert) - default false
}

Usage

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);

var query = {
  title : 'jsonfs works'
};

var dataToBeUpdate = {
  title : 'jsonfs works again!',
};

var options = {
   multi: false,
   upsert: false
};

var updated = db.articles.update(query, dataToBeUpdate, options);
console.log(updated); // { updated: 1, inserted: 0 }

Remove Collection

db.collectioName.remove(query, multi);

You can remove the entire collection (including the file) or you can remove the matched objects by passing in a query. When you pass a query, you can either delete all the matched objects or only the first one by passing multi as false. The default value of multi is true.

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.remove({rating : "5 stars"});
var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.remove({rating : "5 stars"}, true); // remove all matched. Default - multi = true
var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.remove({rating : "5 stars"}, false); // remove only the first match

Using remove without any params will delete the file and will remove the db instance.

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.remove();

After the above operation db.articles is undefined.

Count

db.collectioName.count();

Will return the count of objects in the Collection

var db = require('jsonfs');
db.connect('/demos/db', ['articles']);
db.articles.count(); // will give the count

demos

Refer to the demos folder.

Performance

To validate jsonfs's performance and to check if it meets your needs, you can clone this repo and run

$ node performance/time.js

An average of few tests can be found below

Time taken to process x number of objects (in ms) vs Action Performed

1 (object) 1000 (objects) 10000 (objects) 100000 (objects) 1000000 (objects)
Save 1 (ms) 15 (ms) 137 (ms) 1782 (ms) 14425 (ms)
Find all without query 0 (ms) 2 (ms) 12 (ms) 204 (ms) 2923 (ms)
Find all with query 0 (ms) 2 (ms) 17 (ms) 738 (ms) 1985 (ms)
Find one without query 0 (ms) 1 (ms) 9 (ms) 791 (ms) 1676 (ms)
Find one with query 0 (ms) 1 (ms) 8 (ms) 219 (ms) 1410 (ms)
Update all records 1 (ms) 7 (ms) 61 (ms) 206 (ms) 48035 (ms)
Get count 0 (ms) 3 (ms) 11 (ms) 260 (ms) 2420 (ms)
Remove with query 0 (ms) 7 (ms) 59 (ms) 984 (ms) 48191 (ms)
Remove collection 0 (ms) 1 (ms) 4 (ms) 52 (ms) 154 (ms)
File size 0.000111 (MB) 0.116671 (MB) 1.196671 (MB) 12.266671 (MB) 125.666671 (MB)

Contributing

See the CONTRIBUTING Guidelines

Release History

  • 0.0.1
    • Base Module with
      • Connect to a Folder
      • Access a Collection/File
      • Create Read Update Delete on JSON object

License

Copyright (c) 2014 Jalal Hejazi. Licensed under the MIT license.

Package Sidebar

Install

npm i @webgap/jsonfs

Weekly Downloads

2

Version

0.1.7

License

MIT

Last publish

Collaborators

  • webgap