Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
underscore.db
Advanced tools
Adds functions to Underscore/Lo-Dash for manipulating database-like objects.
It adds get
, insert
, update
, updateWhere
, remove
, removeWhere
, save
, load
and createId
and can be used in Node and the browser.
Data can be persisted using the filesystem or localStorage.
For a full JSON database built on Lo-Dash and Underscore.db, check LowDB.
Node
$ npm install underscore underscore.db
var _ = require('underscore');
require('underscore.db').mixWith(_);
Browser
$ bower install underscore underscore.db
<script src="underscore.js" type="text/javascript"></script>
<script src="underscore.db.js" type="text/javascript"></script>
To use Underscore.db with Lo-Dash, just replace underscore
with lodash
Create an empty database object
var db = {
posts: []
}
Create a post
var newPost = _.insert(db.posts, {title: 'foo'});
Display database console.log(db)
{
posts: [
{title: "foo", id: "5ca959c4-b5ab-4336-aa65-8a197b6dd9cb"}
]
}
Retrieve post using underscore.db get
or underscore find
method
var post = _.get(db.posts, newPost.id);
var post = _.find(db.posts, function(post) {
return post.title === 'foo'
});
Persist
_.save(db);
The following database object is used in API examples.
var db = {
posts: [
{id: 1, body: 'one', published: false},
{id: 2, body: 'two', published: true}
],
comments: [
{id: 1, body: 'foo', postId: 1},
{id: 2, body: 'bar', postId: 2}
]
}
get(collection, id)
Finds and returns document by id or undefined.
var post = _.get(db.posts, 1);
insert(collection, document)
Adds document to collection, sets an id and returns created document.
var post = _.insert(db.posts, {body: 'New post'});
update(collection, id, attrs)
Finds document by id, copies properties to it and returns updated document or undefined.
var post = _.update(db.posts, 1, {body: 'Updated body'});
updateWhere(collection, whereAttrs, attrs)
Finds documents using _.where
, updates documents and returns updated documents or an empty array.
// Publish all unpublished posts
var posts = _.updateWhere(db.posts, {published: false}, {published: true});
remove(collection, id)
Removes document from collection and returns it or undefined.
var comment = _.remove(db.comments, 1);
removeWhere(collection, whereAttrs)
Removes documents from collection using _.where
and returns removed documents or an empty array.
var comments = _.removeWhere(db.comments, {postId: 1});
save(db, [destination])
Persists database using localStorage or filesystem. If no destination is specified it will save to db
or ./db.json
.
_.save(db);
_.save(db, '/some/path/db.json');
load([source])
Loads database from localStorage or filesystem. If no source is specified it will load from db
or ./db.json
.
var db = _.load();
var db = _.load('/some/path/db.json');
Overwrite it if you want to use another id property.
_.id = '_id';
createId(collectionName, doc)
Called by Underscore.db when a document is inserted. Overwrite it if you want to change id generation algorithm.
_.createId = function(collectionName, doc) {
return collectionName + '-' + doc.name + '-' + _.random(1, 9999);
}
Everything you need for querying is present in Underscore and Lo-Dash: where
, find
, map
, reduce
, filter
, reject
, sortBy
, groupBy
, countBy
, ...
See http://underscorejs.org/ or http://lodash.com/docs.
Example:
// Using Underscore
var topFivePosts = _(db.posts)
.chain()
.where({published: true})
.sortBy(function(post) {
return post.views;
})
.first(5)
.value();
// Using Lo-Dash
var topFivePosts = _(db.posts)
.where({published: true})
.sortBy('views')
.first(5)
.value();
With Lo-Dash, you can create optimal builds and include just what you need.
Minimal build for Underscore.db to work (~2kb min gzipped):
$ npm install -g lodash-cli
$ lodash underscore include=find,where,clone,indexOf
For more build options, see http://lodash.com/custom-builds.
Underscore.db is released under the MIT License.
FAQs
Use JavaScript objects as databases
We found that underscore.db 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
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.