simple-node-jsondb

A very easy to use jsonDB for small projects/ Testing.

Usage no npm install needed!

<script type="module">
  import simpleNodeJsondb from 'https://cdn.skypack.dev/simple-node-jsondb';
</script>

README

This library is no longer maintained.

Use version 2 instead

simple-node-jsondbv2

simple-node-jsondb

Installation

$ npm install simple-node-jsondb@latest const db = require('simple-node-jsondb')

Features

  • + Extremely lightweight
  • + Very simple to use
  • + Syntax similar to mongoose
  • + Capable of find, insert, update, delete
  • - Targeting deep Object does not work. You need to manipulate the data manually and save it as whole.
  • - Indexing not supported yet, thus not recommended for large scale production use. Use a proper DB for that.

Things I would probably add (maybe / depends)

  • Capability to Push into array.
  • Capability to Pull from array.
  • Capability to Find Deep properties.
  • Indexing

Not so simple anymore huh?

Table Of Contents

  • Installation
  • Features
  • Things I would probably add
  • Table Of Contents
  • API
    • Example Dataset
  • db.init()
  • db.insert()
    • Insert one
    • Insert many
  • db.find()
    • Find All
    • Find one
    • Multiple filters
    • Advance Search
  • db.update()
    • Update All records
    • Update One
  • db.delete()
    • Delete one specific record
    • Delete records with conditions
    • Delete All
  • Special Operators

API

You can either use api as:

db.find().then((result)=>{
    /*Your logic*/
}).catch(()=>{
    /*Error handle*/
})

or ***Recommended

try{
    let result = await db.find()
    /*Your logic*/
}catch(err){
    /*Error handle*/
}

Example Dataset

Data will change accordingly throughout the documentation. Automatically start as an empty object

{}

db.init([dbPath])

To use the db, you need to initialize the db onload before you can use it, by default the db path will be in the node_module folder (<path>/node_modules/simpleJsonDB). Simply pass in the desired absolute path to change the directory.

/*Recommend to use "path"*/
const path = require("path")
/* This will initialize the db in your root project folder */
const dbPath = path.join(__dirname,'./db.json') 
db.init( dbPath )

db.insert([collection/table], [data])

  • Insert data into database.
  • Refer as "collection" for noSQL users, or "table" for users that is more fimilar with SQL.
Params Required Type Description
collection/table True String Target collection/table
data True Object/Array Data to insert into collection/table. Can be either Object or Array.

Return

  • None

Insert one

const newUser = {
    "name":"Alice",
    "age":15,
    "food": [
        "Orange","Fish"
    ],
}
/*Omitting async handles*/
/* New collection/table "users" will be added automatically */
await db.insert( 'users', newUser )

let result = await db.find( 'users' , {} )
console.log(result)
{
    "users":[
        {
            "name":"John",
            "age":20,
            "food": [
                "Burger","Sushi"
            ]
        }
    ]
}

Insert many

By using Array

const newUsers = [
    {
        "name":"Susan",
        "age":21,
        "food": [
            "Salad","Apple"
        ],
    },
    {
        "name":"Alice",
        "age":15,
        "food": [
            "Orange","Fish"
        ]
    }
]
/*Omitting async handles*/
await db.insert( 'users', newUsers )

let result = await db.find( 'users' , {} )
console.log(result)
{
    "name":"John",
    "age":20,
    "food": [
        "Burger","Sushi"
    ],
},
{
    "name":"Susan",
    "age":21,
    "food": [
        "Salad","Apple"
    ],
},
{
    "name":"Alice",
    "age":15,
    "food": [
        "Orange","Fish"
    ]
}

db.find([collection/table], [filter])

  • Find and retrieve data from database
Params Required Type Description
collection/table True String Target collection/table
filter True Object/Array Filter. Can be either Object or Array. Pass an empty Object to find all

Return

  • Array

Basic usage

Find All

/*Omitting async handles*/
let result = await db.find( 'users' , {} )

Find one

Finding a single record.

/* Omitting async handles*/
let result = await db.find( 'users' , { name : "John" } )
console.log(result)
/* Result:
    [{
        "name":"John",
        "age":20,
        "food": [
            "Burger","Sushi"
        ]
    }]
*/

Multiple filters

Finding with multiple AND conditions by using Array.

/* Omitting async handles*/
let result = await db.find( 'users' , [ { name : "John" }, { age : 20 } ] )
console.log(result)
/* Result:
    [{
        "name":"John",
        "age":20,
        "food": [
            "Burger","Sushi"
        ]
    }]
*/

Advance Search

Advanced search with filtering can be done by using Special Operators. Check out Special Operators section in the end of the page for more info.

/* Omitting async handles*/
let result = await db.find( 'users' , {
    age : { $ge : 15, $l : 21 }
})
console.log(result)
/* Result:
    [
        {
            "name":"John",
            "age":20,
            "food": [
                "Burger","Sushi"
            ]
        },
        {
            "name":"Alice",
            "age":15,
            "food": [
                "Orange","Fish"
            ]
        }
    ]
*/

db.update([collection/table], [filter], [newData])

  • Find and retrieve data from database
Params Required Type Description
collection/table True String Target collection/table
filter True Object/Array Filter. Can be either Object or Array.
newData True Object/Array New data to overwrite. Can be either Object or Array.

Return

  • Array

Update All records

/* Omitting async handles*/
await db.update( 'users', {}, { food:[] } )
let result = await db.find( 'users', {})
console.log(result)
/* Result:
    [
        {
            "name":"John",
            "age":20,
            "food": []
        },
        {
            "name":"Susan",
            "age":21,
            "food": []
        },
        {
            "name":"Alice",
            "age":15,
            "food": []
        }
    ]
*/

Update One

/* Omitting async handles*/
/* Will automatically add any pre-undefined property */
await db.update( 'users', { name:"John" }, [ { age: 25 }, { sports : "Basketball" } ] )
let result = await db.find( 'users', { name:"John" } )
console.log(result)
/* Result:
    [
        {
            "name":"John",
            "age":25,
            "food": [],
            "sports":"Basketball"
        }
    ]
*/
  • filter param works with Special Operators and AND too.

db.delete([collection/table], [filter], [confirm])

  • Find and retrieve data from database
Params Required Type Description
collection/table True String Target collection/table
filter True Object/Array Filter. Can be either Object or Array.
confirm False Object/Array Only needed when no filter is specified to protect accidentialy deletion of all data. Set it True to confirm the action.

Return

  • None

Delete one specific record

/* Omitting async handles*/
await db.delete( 'users', { name : "John" } )
let result = await db.find( 'users', {})
console.log(result)
/* Result:
    [
        {
            "name":"Susan",
            "age":21,
            "food": []
        },
        {
            "name":"Alice",
            "age":15,
            "food": []
        }
    ]
*/

Delete records with conditions

/* Omitting async handles*/
await db.delete( 'users', { age : { $ge : 15 } } )
let result = await db.find( 'users', {})
console.log(result)
/* Result:
    []
*/

Delete All

/* Omitting async handles*/
await db.delete( 'users', {}, true )

Special Operators

Operators Descriptions
$ge Greater and equals to
$g Greater than
$le Lesser and equals to
$l Lesser than