@turbopasi/nedboose
v1.0.1
Published
Lightweight NeDB-based mini ORM with JSON persistence.
Maintainers
Readme
NeDBoose
A minimal Mongoose-like wrapper for @seald-io/nedb in vanilla Node.js for a simple, local persistent storage.
Dependencies
@seald-io/nedbFeatures
- Schema validation: required fields (
required), default values (default), type checking (String, Number, Array, etc.). - Indexing & Unique: fields with the
indexoruniqueflag are automatically indexed. - TTL index: expire documents via
ttlin seconds. - CRUD:
create,find,findOne,update,delete. - Populate: resolve references to other models (
ref), including batch fetching (avoiding N+1). - Query options:
sort(),skip(),limit(). - Autocompaction: automatic database compaction.
- In-memory: optional via
inMemoryOnly.
Usage
Defining Models
const { model } = require('nedboose');
// Author
const Author = model('Author', {
name: { type: String, required: true, unique: true, index: true },
books: { type: Array, ref: 'Book', default: [] },
});
// Book
const Book = model('Book', {
title: { type: String, required: true, index: true },
publishedAt: { type: Date, default: () => new Date(), ttl: 60 * 60 * 24 * 30 }, // 30 days
author: { type: String, ref: 'Author', required: true },
});Creating Documents
(async () => {
const author = await Author.create({ name: 'Franz Kafka' });
const book1 = await Book.create({ title: 'Der Process', author: author._id });
const book2 = await Book.create({ title: 'Die Verwandlung', author: author._id });
})();Resolving References (Populate)
(async () => {
// Single query with populate
const book = await Book
.findOne({ title: 'Der Process' })
.populate('author')
.exec();
console.log(book.author.name); // 'Franz Kafka'
// Many-to-One
const authors = await Author
.find({})
.populate('books')
.sort({ name: 1 })
.limit(10)
.exec();
authors.forEach(a => {
console.log(a.name, a.books.map(b => b.title));
});
})();Options
When creating a model you can pass a third options object:
const Session = model('Session', { /* schema */ }, {
inMemoryOnly: true,
autocompactionInterval: 60000, // every minute
});inMemoryOnly(boolean): keep the database in RAM (no file).autocompactionInterval(ms): interval for autocompaction.
Note: This package is intentionally minimal. For advanced functionality (middleware, hooks), consider using Mongoose or other ORMs.
