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>
##Contents
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('','');
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.
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']);
var db = require('jsonfs');
db.connect('/demos/db', ['articles','comments','users']);
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' } ]
There are 2 methods available for reading the JSON collection
- db.collectioName.find(query)
- db.collectioName.findOne(query)
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.
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'});
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 }
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
.
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
Refer to the demos folder.
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
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) |
See the CONTRIBUTING Guidelines
- 0.0.1
- Base Module with
- Connect to a Folder
- Access a Collection/File
- Create Read Update Delete on JSON object
- Base Module with
Copyright (c) 2014 Jalal Hejazi. Licensed under the MIT license.