
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
@webgap/jsonfs
Advanced tools
Fork for using with WebGAP.
Nodejs JSON Database like MongoDB, but only using the FileSystem (File IO).
##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
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
Copyright (c) 2014 Jalal Hejazi. Licensed under the MIT license.
FAQs
FileSystem JSON Database API
The npm package @webgap/jsonfs receives a total of 0 weekly downloads. As such, @webgap/jsonfs popularity was classified as not popular.
We found that @webgap/jsonfs demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.