Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mrvautin/wee-db
A 'wee' and simple embedded JSON database built on `lowdb` with some traditional query benefits/syntax
https://github.com/mrvautin/wee-db
db embedded-database lowdb wee-db
Last synced: 27 days ago
JSON representation
A 'wee' and simple embedded JSON database built on `lowdb` with some traditional query benefits/syntax
- Host: GitHub
- URL: https://github.com/mrvautin/wee-db
- Owner: mrvautin
- License: mit
- Created: 2016-10-04T03:27:49.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-04-30T21:55:02.000Z (over 4 years ago)
- Last Synced: 2024-10-04T09:09:03.796Z (about 1 month ago)
- Topics: db, embedded-database, lowdb, wee-db
- Language: JavaScript
- Size: 19.5 KB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# wee-db
`wee-db` is a 'wee' and simple embedded JSON database built on [lowdb](https://github.com/typicode/lowdb) with some traditional query benefits/syntax. `wee-db` is perfect
for projects which require a small, simple and embedded database without the over head of a full database.## Features
`wee-db` has the following functionality:
- Insert documents (Allows for auto generate ID's)
- Update documents
- Upsert documents
- Find documents
- FindOne document
- Remove documents
- Simple lodash ([lowdb](https://github.com/typicode/lowdb)) syntax
- Runs in Node.js and in the browser## Quick start
### Install
#### Node.js
```
npm install wee-db --save
```Your script can then use `wee-db` by:
``` javascript
var wee_db = require('wee-db');
var db = wee_db('my-db.json');
```This will create a DB file called `my-db.json` in the same directory as your calling script.
#### In the browser
Running in the browser uses localStorage. It's as simple as:
``` html
var db = wee_db('db');
db.insert('blog', {title: 'wee_db'});
console.log(db.find('blog', {title: 'wee_db'}));
```
Note: You need to ensure you include `lodash` before `wee-db`.
**Check your browser console for the output**
### Interacting with your DB
You can query your DB using a Sync call or by using an Async callback. See `test/test.js` and examples for more info. You can choose to separate your DB into separate files
by creating individual `wee-db` instances or you can use `collections` and keep it all in one single DB file.All queries take a `collection` as the first parameter and depending on the type of query, the other parameters will vary. See examples.
All queries will return an object with a `count` of documents which matched the criteria and a `documents` array (except `findOne` which returns an Object) containing
the matched document.An example returned Object:
``` javascript
{
count: 1,
documents: [
{
id: 'a8bcb689-52b3-42e9-8f9f-6913c974322e',
title: 'A title',
body: 'Somebody'
}
]
}
```### Inserting documents
Inserting a document into the `blog` collection and auto generate a ID is as simple as:
``` javascript
var data = db.insert('blog', {body: 'Some body'});
console.log(data);
```Inserting a document with your own ID:
``` javascript
var random_id = '123456789';
var data = db.insert('blog', {id: random_id, body: 'Some body'});
console.log(data);
```### Updating documents
Updates take 3 parameters. The first being the `collection`, the second being the `query` for which documents you are intending to update and the third is
the `values` you wish to update.Updating a document is a simple as:
``` javascript
var myid = '123456789';
var data = db.update('blog', {id: myid}, {body: "Some body - Updated"});
console.log(data);
```### Upserting documents
Upserting will update a document if it matches the `query` criteria or insert that document if one is not found.
Upserts take 3 parameters. The first being the `collection`, the second being the `query` for which documents you are intending to update and the third is
the `values` you wish to update.Updating a document is a simple as:
``` javascript
var data = db.upsert('blog', {title: "This will not be found"}, {body: "Some body"});
console.log(data);
```### Find documents
Finding documents takes 2 parameters. The first is the `collection` followed by the `query`.
The following `query` will check the `blog` collection and match all documents which have a `body` which is equal to `Some body data`.
``` javascript
var data = db.find('blog', {body: 'Some body data'});
console.log(data);
```The query above will return an object with a count and an array of match documents.
### FindOne documents
Finding documents takes 2 parameters. The first is the `collection` followed by the `query`.
The following `query` will check the `blog` collection and return the first matched document which has a `body` which is equal to `Some body data`.
``` javascript
var data = db.findOne('blog', {body: 'Some body data'});
console.log(data);
```The query above will return an object with a count and an Object with the matched document.
### lowdb Find
`wee-db` is built on [lowdb](https://github.com/typicode/lowdb) and allows for the use and easy of finding documents based on the [lowdb](https://github.com/typicode/lowdb) syntax
``` javascript
var data = db._find('blog')
.filter({title: 'A title'})
.take(5)
.value();
console.log(data);
```See the [lowdb](https://github.com/typicode/lowdb) documentation for more examples: [https://github.com/typicode/lowdb](https://github.com/typicode/lowdb)
### Document ID's
ID's are required for all documents. If and `id` value is supplied in the updating document it will be used provided there is not another document with that same ID.
If the document doesn't supply an `id` value, one will be generated when the insert is done.### Tests
Tests can be performed using:
```
npm test
```### Build for browser
Building can be done for the browser by running the `build` script:
```
npm run build
```This will build a file for the browser using `Webpack` both normal and minified in the `dist` folder.