Memongo is a lightweight in-memory JSON database with MongoDB-like API and pluggable persistence.
By delegating persistence to user-defined read/write functions, Memongo stays fully environment-agnosticβworking out of the box in environments including browsers, Node.js, and WeChat Mini Programs.
npm install memongo
π‘ All examples in this repository are written in TypeScript, but they work in JavaScript without any changes.
import { createDatabase } from "memongo";
async function main() {
// 1) Create an in-memory database (no persistence argument).
const db = createDatabase();
await db.init();
// 2) Create or get a collection.
let todos = db.collection("todos");
if (!todos) {
todos = db.createCollection("todos");
}
// 3) Add documents.
const { _id: buyMilkId } = todos.add({
title: "Buy milk",
done: false,
priority: 2,
});
todos.add({
title: "Read Memongo docs",
done: false,
priority: 1,
});
console.log("After add:", todos.get());
// 4) Read one document by id.
const buyMilk = todos.doc(buyMilkId).get();
console.log("One doc:", buyMilk);
// 5) Update one document.
todos.doc(buyMilkId).update({
done: true,
});
console.log("After doc.update:", todos.get());
// 6) Remove one document.
todos.doc(buyMilkId).remove();
console.log("After doc.remove:", todos.get());
// 7) Remove all documents in the collection.
todos.remove();
console.log("After collection.remove:", todos.get());
}
main();
Write operations apply changes to the in-memory state synchronously.
If persistence is configured, data is written asynchronously in the background.
To ensure all pending persistence operations are completed, call:
await db.flush();
Persistence-related errors are not thrown during write operations. They are reported when calling flush().
β‘οΈ See this example for detailed usage.
Usage Examples:
β‘οΈ See examples
importThanks to the following open-source projects: