kek-db
v1.2.0
Published
Document-oriented in-memory data store
Downloads
4
Readme
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
// find a single document via specified index
// (falls back to collection scan if no index found for a given key)
repos
.by("unique")
.findOne("id", 2)
.value()
// same but first tries to find via unique index
// otherwise falls back to collection scan
repos.findOne("id", 2).value()
find
// find all documents via specified index
// (falls back to collection scan if no index found for a given key)
repos
.by("sorted")
.find("stars", 100)
.value()
// same but performs scan over entire collection
repos.find("stars", 100).value()
findWhere
// filter over entire collection
repos.findWhere(r => r.stars > 100).value()
Query Transformation
offset
repos
.by("sorted")
.find("stars", 100)
// shift results by 10 items
.offset(10)
.value()
limit
repos
.by("sorted")
.find("stars", 100)
// limit results to 10 first items
.limit(10)
.value()
Altering Collections
remove
// find and delete matching documents
repos.find("stars", 0).remove()
// remove a document from a collection
repos.remove(doc)
// remove a set of documents from a collection
repos.remove(docs)
// clear entire collection
repos.remove()
update
const doc = repos.findOne("id", 88636757).value()
doc.stars = 100
// update a document in collection (matches by `__id`)
repos.update(doc)
Transactions History
// returns transactions history for a document with specified `__id`
repos.evolutionOf(9)
Persistence
// returns a snapshot of the database as plaing object
const snapshot1 = db.snapshot()
localStorage.setItem("db1", JSON.stringify(snapshot1))
const snapshot2 = JSON.parse(localStorage.getItem("db1"))
// populates database from a snapshot
const db2 = new Database(snapshot2)