Skip to content

Jalalhejazi/jsonfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

FileSystem JSON Database API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published