memongo
    Preparing search index...

    memongo

    Memongo Logo

    Memongo

    npm version

    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.

    • 🧠 In-memory JSON database with MongoDB-like API
    • πŸ”„ Atomic in-memory operations with deferred persistence
    • πŸ”Œ Pluggable persistence (Node.js, browser, wechat-miniprogram, custom)
    • ⚑ Lightweight and fast
    • πŸ”€ Works in both TypeScript and JavaScript
    • πŸ“¦ No dependencies
    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.

    πŸ‘‰ Full API documentation

    Usage Examples:

    • In-memory usage
    • Query commands
    • Update commands
    • Custom persistence (node, browser, wechat-miniprogram)

    ➑️ See examples

    • βœ… Node.js
    • βœ… Browser
    • βœ… WeChat Mini Program
    • βœ… Any JavaScript runtime (via adapter)
    • ESM only β†’ use import
    • The package is compiled to ES2022.
    • The entire database is rewritten during persistence
    • Not suitable for large datasets
    • No indexing support yet

    Thanks to the following open-source projects:

    MIT