Socket
Socket
Sign inDemoInstall

@webgap/jsonfs

Package Overview
Dependencies
6
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @webgap/jsonfs

FileSystem JSON Database API


Version published
Weekly downloads
1
Maintainers
1
Created
Weekly downloads
 

Readme

Source

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

  • Small JSON file database for Node.js
  • NoSQL JSON-Database mongoDB

##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)
Save1 (ms)15 (ms)137 (ms)1782 (ms)14425 (ms)
Find all without query0 (ms)2 (ms)12 (ms)204 (ms)2923 (ms)
Find all with query0 (ms)2 (ms)17 (ms)738 (ms)1985 (ms)
Find one without query0 (ms)1 (ms)9 (ms)791 (ms)1676 (ms)
Find one with query0 (ms)1 (ms)8 (ms)219 (ms)1410 (ms)
Update all records1 (ms)7 (ms)61 (ms)206 (ms)48035 (ms)
Get count0 (ms)3 (ms)11 (ms)260 (ms)2420 (ms)
Remove with query0 (ms)7 (ms)59 (ms)984 (ms)48191 (ms)
Remove collection0 (ms)1 (ms)4 (ms)52 (ms)154 (ms)
File size0.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.

Keywords

FAQs

Last updated on 21 Jun 2015

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc