JavaScript In-Memory Database
Installation
npm i kek-db
Database
import { Database } from "kek-db"
const db = new Database()
repos.insert(doc)
Collection
const repos = db.addCollection("repos")
Indexes
repos.indexBy(field, index)
index = "multiple" | "unique" | "sorted"
Multiple
const coll = [
{ id: 1, age: 14 },
{ id: 2, age: 24 },
{ id: 3, age: 43 },
{ id: 4, age: 24 },
]
const indexByAge = {
14: [{ id: 1, age: 14 }],
24: [{ id: 2, age: 24 }, { id: 4, age: 24 }],
43: [{ id: 3, age: 43 }],
}
Unique
const coll = [
{ id: 1, age: 14 },
{ id: 2, age: 24 },
{ id: 3, age: 43 },
{ id: 4, age: 24 },
]
const indexById = {
1: { id: 1, age: 14 },
2: { id: 2, age: 24 },
3: { id: 3, age: 43 },
4: { id: 4, age: 24 },
}
Sorted
const coll = [
{ id: 1, age: 14 },
{ id: 2, age: 24 },
{ id: 3, age: 43 },
{ id: 4, age: 24 },
]
const indexByAge = {
keys: [14, 24, 43],
documents: [
[{ id: 1, age: 14 }],
[{ id: 2, age: 24 }, { id: 4, age: 24 }],
[{ id: 3, age: 43 }],
],
}
Querying
findOne
repos
.by("unique")
.findOne("id", 2)
.value()
repos.findOne("id", 2).value()
find
repos
.by("sorted")
.find("stars", 100)
.value()
repos.find("stars", 100).value()
findWhere
repos.findWhere(r => r.stars > 100).value()
Query Transformation
offset
repos
.by("sorted")
.find("stars", 100)
.offset(10)
.value()
limit
repos
.by("sorted")
.find("stars", 100)
.limit(10)
.value()
Altering Collections
remove
repos.find("stars", 0).remove()
repos.remove(doc)
repos.remove(docs)
repos.remove()
update
const doc = repos.findOne("id", 88636757).value()
doc.stars = 100
repos.update(doc)
Transactions History
Persistence
const snapshot1 = db.snapshot()
localStorage.setItem("db1", JSON.stringify(snapshot1))
const snapshot2 = JSON.parse(localStorage.getItem("db1"))
const db2 = new Database(snapshot2)