connect = function (path, collections) { if (util.isValidPath(path)) { var _db = {}; _db.path = path; this._db = _db; console.log(s('Successfully connected to : ' + path)); if (collections) { this.loadCollections(collections); } } else { console.log(e('The DB Path [' + path + '] does not seem to be valid. Recheck the path and try again')); return false; } return this; }
...
Install the module locally :
```bash
$ npm install diskdb
```
```js
var db = require('diskdb');
db = db.connect('/path/to/db-folder', ['collection-name']);
// you can access the traditional JSON DB methods here
```
## Documentation
### Connect to DB
```js
db.connect(pathToFolder, ['filename']);
...
loadCollections = function (collections) { if (!this._db) { console.log(e('Initialize the DB before you add collections. Use : ', 'db.connect(\'path-to-db\');')); return false; } if (typeof collections === 'object' && collections.length) { for (var i = 0; i < collections.length; i++) { var p = path.join(this._db.path, (collections[i].indexOf('.json') >= 0 ? collections[i] : collections[i] + '.json')); if (!util.isValidPath(p)) { util.writeToFile(p); } var _c = collections[i].replace('.json', ''); this[_c] = new require('./collection')(this, _c); } } else { console.log(e('Invalid Collections Array.', 'Expected Format : ', '[\'collection1\',\'collection2\',\'collection3\']')); } return this; }
...
### Load Collections
Alternatively you can also load collections like
```js
var db = require('diskdb');
// this
db = db.connect('/examples/db');
db.loadCollections(['articles']);
//or
db.connect('/examples/db');
db.loadCollections(['articles']);
//or
db.connect('/examples/db')
.loadCollections(['articles']);
//or
...
ObjectSearcher = function () { this.results = []; this.objects = []; this.resultIDS = {}; }
...
coltn._f = path.join(db._db.path, (collectionName + '.json'));
coltn.find = function(query) {
var collection = JSON.parse(util.readFromFile(this._f));
if (!query || Object.keys(query).length === 0) {
return collection;
} else {
var searcher = new util.ObjectSearcher();
return searcher.findAllInObject(collection, query, true);
}
};
coltn.findOne = function(query) {
var collection = JSON.parse(util.readFromFile(this._f));
if (!query) {
...
finder = function (collection, query, multi) { var retCollection = []; loop: for (var i = collection.length - 1; i >= 0; i--) { var c = collection[i]; for (var p in query) { if (p in c && c[p] == query[p]) { retCollection.push(collection[i]); if (!multi) { break loop; } } } } return retCollection; }
...
return data;
}
};
coltn.update = function(query, data, options) {
var ret = {},
collection = JSON.parse(util.readFromFile(this._f)); // update
var records = util.finder(collection, query, true);
if (records.length) {
if (options && options.multi) {
collection = util.updateFiltered(collection, query, data, true);
ret.updated = records.length;
ret.inserted = 0;
} else {
collection = util.updateFiltered(collection, query, data, false);
...
isValidPath = function (path) { return fs.existsSync(path); }
n/a
readFromFile = function (file) { return fs.readFileSync(file, 'utf-8'); }
...
module.exports = function(db, collectionName) {
var coltn = {};
coltn.collectionName = collectionName;
coltn._f = path.join(db._db.path, (collectionName + '.json'));
coltn.find = function(query) {
var collection = JSON.parse(util.readFromFile(this._f));
if (!query || Object.keys(query).length === 0) {
return collection;
} else {
var searcher = new util.ObjectSearcher();
return searcher.findAllInObject(collection, query, true);
}
};
...
removeFile = function (file) { return fs.unlinkSync(file); }
...
if (typeof multi === 'undefined') {
multi = true;
}
collection = util.removeFiltered(collection, query, multi);
util.writeToFile(this._f, collection);
} else {
util.removeFile(this._f);
delete db[collectionName];
}
return true;
};
coltn.count = function() {
return (JSON.parse(util.readFromFile(this._f))).length;
...
removeFiltered = function (collection, query, multi) { // break 2 loops at once - multi : false loop: for (var i = collection.length - 1; i >= 0; i--) { var c = collection[i]; for (var p in query) { if (p in c && c[p] == query[p]) { collection.splice(i, 1); if (!multi) { break loop; } } } } return collection; }
...
coltn.remove = function(query, multi) {
if (query) {
var collection = JSON.parse(util.readFromFile(this._f));
if (typeof multi === 'undefined') {
multi = true;
}
collection = util.removeFiltered(collection, query, multi);
util.writeToFile(this._f, collection);
} else {
util.removeFile(this._f);
delete db[collectionName];
}
return true;
...
updateFiltered = function (collection, query, data, multi) { // break 2 loops at once - multi : false loop: for (var i = collection.length - 1; i >= 0; i--) { var c = collection[i]; for (var p in query) { if (p in c && c[p] == query[p]) { collection[i] = merge(c, data); if (!multi) { break loop; } } } } return collection; }
...
coltn.update = function(query, data, options) {
var ret = {},
collection = JSON.parse(util.readFromFile(this._f)); // update
var records = util.finder(collection, query, true);
if (records.length) {
if (options && options.multi) {
collection = util.updateFiltered(collection, query, data, true);
ret.updated = records.length;
ret.inserted = 0;
} else {
collection = util.updateFiltered(collection, query, data, false);
ret.updated = 1;
ret.inserted = 0;
}
...
writeToFile = function (outputFilename, content) { if (!content) { content = []; } fs.writeFileSync(outputFilename, JSON.stringify(content, null, 0)); }
...
var retCollection = [];
for (var i = data.length - 1; i >= 0; i--) {
var d = data[i];
d._id = uuid.v4().replace(/-/g, '');
collection.push(d);
retCollection.push(d);
}
util.writeToFile(this._f, collection);
return retCollection;
} {
data._id = uuid.v4().replace(/-/g, '');
collection.push(data);
util.writeToFile(this._f, collection);
return data;
}
...